using System; using System.Collections.Generic; namespace CppSharp.AST { /// /// Represents a C/C++ enumeration declaration. /// public class Enumeration : Declaration { [Flags] public enum EnumModifiers { Anonymous, Scoped, Flags } /// /// Represents a C/C++ enumeration item. /// public class Item : INamedDecl { public string Name { get; set; } public ulong Value; public string Expression; public string Comment; public bool ExplicitValue = true; public bool IsHexadecimal { get { return Expression.Contains("0x") || Expression.Contains("0X"); } } } public Enumeration() { Items = new List(); ItemsByName = new Dictionary(); BuiltinType = new BuiltinType(PrimitiveType.Int32); } public Enumeration AddItem(Item item) { Items.Add(item); ItemsByName[item.Name] = item; return this; } public string GetItemValueAsString(Item item) { var format = item.IsHexadecimal ? "x" : string.Empty; var value = BuiltinType.IsUnsigned ? item.Value.ToString(format) : ((long)item.Value).ToString(format); return item.IsHexadecimal ? "0x" + value : value; } public Enumeration SetFlags() { Modifiers |= EnumModifiers.Flags; return this; } public bool IsFlags { get { return Modifiers.HasFlag(EnumModifiers.Flags); } } public Type Type { get; set; } public BuiltinType BuiltinType { get; set; } public EnumModifiers Modifiers { get; set; } public List Items; public Dictionary ItemsByName; public override T Visit(IDeclVisitor visitor) { return visitor.VisitEnumDecl(this); } } }