Opentk/src/vk.generator/ParameterDefinition.cs
ReinUsesLisp 2d77d0949f Vulkan bindings (#1)
* Initial Vulkan support
2018-08-01 05:06:22 +03:00

77 lines
2.1 KiB
C#

using System;
using System.Xml.Linq;
namespace Vk.Generator
{
public class ParameterDefinition
{
public string Name { get; }
public TypeSpec Type { get; }
public ParameterModifier Modifier { get; }
public bool IsOptional { get; }
public ParameterDefinition(string name, TypeSpec type, ParameterModifier modifier, bool isOptional)
{
Name = name;
Type = type;
Modifier = modifier;
IsOptional = isOptional;
}
public static ParameterDefinition CreateFromXml(XElement xe)
{
string name = xe.Element("name").Value;
var optionalAttr = xe.Attribute("optional");
bool isOptional = optionalAttr != null && optionalAttr.Value == "true";
string typeName = xe.Element("type").Value;
int pointerLevel = 0;
if (xe.Value.Contains($"{typeName}**") || xe.Value.Contains($"{typeName}* const*"))
{
pointerLevel = 2;
}
else if(xe.Value.Contains($"{typeName}*"))
{
pointerLevel = 1;
}
TypeSpec type = new TypeSpec(typeName, pointerLevel);
return new ParameterDefinition(name, type, ParameterModifier.None, isOptional);
}
public string GetMappedAndNormalizedString(TypeNameMappings tnm)
{
return $"{GetModifierString()}{Type.MapTypeSpec(tnm)} {Util.NormalizeFieldName(Name)}";
}
public string GetModifierString()
{
if (Modifier == ParameterModifier.Ref)
{
return "ref ";
}
else if (Modifier == ParameterModifier.Out)
{
return "out ";
}
else
{
return string.Empty;
}
}
public override string ToString()
{
return $"{GetModifierString()}{Type} {Name}";
}
}
public enum ParameterModifier
{
None,
Ref,
Out
}
}