internal virtual int Read(int[] buffer)
{
int bufferUpto = 0;
if (Arr == null)
{
// code is inlined into upto
//System.out.println("inlined");
int code = Upto;
int delta = 0;
for (; ; )
{
delta = (delta << 7) | (code & 0x7f);
if ((code & 0x80) == 0)
{
if (delta == 0)
{
break;
}
Tnum += delta - TNUM_OFFSET;
buffer[bufferUpto++] = OuterInstance.OrdBase + Tnum;
//System.out.println(" tnum=" + tnum);
delta = 0;
}
code = (int)((uint)code >> 8);
}
}
else
{
// code is a pointer
for (; ; )
{
int delta = 0;
for (; ; )
{
sbyte b = Arr[Upto++];
delta = (delta << 7) | (b & 0x7f);
//System.out.println(" cycle: upto=" + upto + " delta=" + delta + " b=" + b);
if ((b & 0x80) == 0)
{
break;
}
}
//System.out.println(" delta=" + delta);
if (delta == 0)
{
break;
}
Tnum += delta - TNUM_OFFSET;
//System.out.println(" tnum=" + tnum);
buffer[bufferUpto++] = OuterInstance.OrdBase + Tnum;
if (bufferUpto == buffer.Length)
{
break;
}
}
}
return bufferUpto;
}