in SharpGen/Transform/EnumTransform.cs [82:141]
public override void Process(CsEnum newEnum)
{
var cppEnum = (CppEnum) newEnum.CppElement;
// Find Root Name of this enum
// All enum items should start with the same root name and the root name should be at least 4 chars
string rootName = cppEnum.Name;
string rootNameFound = null;
bool isRootNameFound = false;
for (int i = rootName.Length; i >= 4 && !isRootNameFound; i--)
{
rootNameFound = rootName.Substring(0, i);
isRootNameFound = true;
foreach (var cppEnumItem in cppEnum.EnumItems)
{
if (!cppEnumItem.Name.StartsWith(rootNameFound))
{
isRootNameFound = false;
break;
}
}
}
if (isRootNameFound)
rootName = rootNameFound;
// Create enum items for enum
foreach (var cppEnumItem in cppEnum.EnumItems)
{
var enumName = NamingRules.Rename(cppEnumItem, rootName);
var enumValue = cppEnumItem.Value;
var csharpEnumItem = new CsEnumItem(cppEnumItem, enumName, enumValue);
newEnum.Add(csharpEnumItem);
}
var rule = cppEnum.Rule;
// Add None if necessary
const string noneElementName = "None";
bool tryToAddNone;
if (rule.EnumHasNone is { } addNone)
tryToAddNone = addNone;
else if (newEnum.IsFlag)
tryToAddNone = newEnum.EnumItems.All(item => item.Name != noneElementName);
else
tryToAddNone = false;
if (tryToAddNone)
{
var csharpEnumItem = new CsEnumItem(null, noneElementName, "0")
{
CppElementName = noneElementName,
Description = "Synthetic NONE value"
};
newEnum.Add(csharpEnumItem);
}
}