namespace CapnpC.CSharp.Generator.Model { class Field { public TypeDefinition DeclaringType { get; set; } public Field Parent { get; set; } public string Name { get; set; } public string CsName { get; set; } public Type Type { get; set; } public Value DefaultValue { get; set; } public bool DefaultValueIsExplicit { get; set; } public ushort? DiscValue { get; set; } public uint Offset { get; set; } public int CodeOrder { get; set; } public ulong? BitOffset => (ulong)Offset * Type?.FixedBitWidth; public Field Clone() { var field = new Field() { DeclaringType = DeclaringType, Parent = Parent, Name = Name, Type = Type, DefaultValue = DefaultValue, DefaultValueIsExplicit = DefaultValueIsExplicit, DiscValue = DiscValue, Offset = Offset, CodeOrder = CodeOrder, }; field.InheritFreeGenericParameters(); return field; } public void InheritFreeGenericParameters() { Type.InheritFreeParameters(DeclaringType); } public override bool Equals(object obj) { return obj is Field other && DeclaringType == other.DeclaringType && Name == other.Name; } public override int GetHashCode() { return (DeclaringType, Name).GetHashCode(); } } }