| 1 | using System; | 
 
 
 
 
 | 2 |  | 
 
 
 
 
 | 3 | namespace Oni.Metadata | 
 
 
 
 
 | 4 | { | 
 
 
 
 
 | 5 | internal class MetaVarArray : MetaType | 
 
 
 
 
 | 6 | { | 
 
 
 
 
 | 7 | private readonly MetaType elementType; | 
 
 
 
 
 | 8 | private readonly Field lengthField; | 
 
 
 
 
 | 9 |  | 
 
 
 
 
 | 10 | public MetaVarArray(MetaType lengthType, MetaType elementType) | 
 
 
 
 
 | 11 | { | 
 
 
 
 
 | 12 | if (lengthType != MetaType.Int16 && lengthType != MetaType.Int32) | 
 
 
 
 
 | 13 | throw new ArgumentException("lengthType must be Int16 or Int32", "lengthType"); | 
 
 
 
 
 | 14 |  | 
 
 
 
 
 | 15 | this.lengthField = new Field(lengthType, "Length"); | 
 
 
 
 
 | 16 | this.elementType = elementType; | 
 
 
 
 
 | 17 |  | 
 
 
 
 
 | 18 | Name = string.Format("{0}[{1}]", elementType.Name, lengthType.Name); | 
 
 
 
 
 | 19 | Size = lengthType.Size; | 
 
 
 
 
 | 20 | } | 
 
 
 
 
 | 21 |  | 
 
 
 
 
 | 22 | public Field CountField => lengthField; | 
 
 
 
 
 | 23 |  | 
 
 
 
 
 | 24 | public MetaType ElementType => elementType; | 
 
 
 
 
 | 25 |  | 
 
 
 
 
 | 26 | protected override bool IsLeafImpl() => elementType.IsLeaf; | 
 
 
 
 
 | 27 |  | 
 
 
 
 
 | 28 | public override void Accept(IMetaTypeVisitor visitor) => visitor.VisitVarArray(this); | 
 
 
 
 
 | 29 | } | 
 
 
 
 
 | 30 | } |