/** * Reads <tt>size</tt> bytes of the input stream, to Create an array of <tt>Ptg</tt>s. * Extra data (beyond <tt>size</tt>) may be Read if and <tt>ArrayPtg</tt>s are present. */ public static Ptg[] ReadTokens(int size, LittleEndianInput in1) { ArrayList temp = new ArrayList(4 + size / 2); int pos = 0; ArrayList arrayPtgs = null; while (pos < size) { Ptg ptg = Ptg.CreatePtg(in1); if (ptg is ArrayPtg) { if (arrayPtgs == null) { arrayPtgs = new ArrayList(5); } arrayPtgs.Add(ptg); pos += ArrayPtg.PLAIN_TOKEN_SIZE; } else { pos += ptg.Size; } temp.Add(ptg); } if (pos != size) { throw new Exception("Ptg array size mismatch"); } if (arrayPtgs != null) { for (int i = 0; i < arrayPtgs.Count; i++) { ArrayPtg p = (ArrayPtg)arrayPtgs[i]; p.ReadTokenValues(in1); } } return(ToPtgArray(temp)); }