natix.CompactDS.BitStream32.ReadOnes C# (CSharp) Method

ReadOnes() public method

public ReadOnes ( BitStreamCtx ctx ) : int
ctx BitStreamCtx
return int
        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;
        }