public int ReadOnes(BitStreamCtx ctx)
{
int c = 0;
while (ctx.Offset < this.N) {
int numbits = (int)Math.Min (32, this.N - ctx.Offset);
uint u = (uint)this.Read (numbits, ctx);
//Console.WriteLine ("--- u: {0}, numbits: {1}", u, numbits);
if (numbits == 32) {
if (u == 0xFFFFFFFF) {
c += numbits;
continue;
}
} else {
if ((u + 1) == (1u << numbits)) {
c += numbits;
continue;
}
}
//Console.WriteLine ("+++ u: {0}, numbits: {1}", u, numbits);
int pos = BitAccess.Select1 (~u, 1);
ctx.Offset -= numbits - pos;
c += pos;
break;
}
return c;
}