public EnumType(TypeId typeId, string?documentation, EnumValue[] values, EnumTypeFlags flags) : this(typeId.ToString(), typeId, documentation, values, flags) { }
public EnumType(string name, TypeId typeId, string?documentation, EnumValue[] values, EnumTypeFlags flags) { toEnumValue = new Dictionary <string, EnumValue>(values.Length, StringComparer.Ordinal); IsPublic = (flags & EnumTypeFlags.Public) != 0; IsFlags = (flags & EnumTypeFlags.Flags) != 0; TypeId = typeId; RawName = name; Documentation = documentation; this.values = values; initialized = (flags & EnumTypeFlags.NoInitialize) == 0; Initialize(values); }
public EnumType(string name, TypeId typeId, string?documentation, EnumValue[] values, EnumTypeFlags flags) { toEnumValue = new Dictionary <string, EnumValue>(values.Length, StringComparer.Ordinal); IsPublic = (flags & EnumTypeFlags.Public) != 0; IsFlags = (flags & EnumTypeFlags.Flags) != 0; TypeId = typeId; RawName = name; Documentation = documentation; Values = values; if ((flags & EnumTypeFlags.NoInitialize) == 0) { if ((flags & EnumTypeFlags.Flags) != 0) { uint value = 0; for (int i = 0; i < values.Length; i++) { if (values[i].RawName == "None") { values[i].Value = 0; } else { if (value == 0) { value = 1; } else if (value == 0x80000000) { throw new InvalidOperationException("Too many enum value"); } else { value <<= 1; } values[i].Value = value; } } } else { for (int i = 0; i < values.Length; i++) { values[i].Value = (uint)i; } } } foreach (var value in values) { value.DeclaringType = this; toEnumValue.Add(value.RawName, value); } }