csvorbis.Floor1.pack C# (CSharp) Method

pack() public method

public pack ( Object i, csBuffer opb ) : void
i Object
opb csogg.csBuffer
return void
        public override void pack(Object i, csBuffer opb)
        {
            InfoFloor1 info=(InfoFloor1)i;

            int count=0;
            int rangebits;
            int maxposit=info.postlist[1];
            int maxclass=-1;

            /* save out partitions */
            opb.write(info.partitions,5);          /* only 0 to 31 legal */
            for(int j=0;j<info.partitions;j++)
            {
                opb.write(info.partitionclass[j],4); /* only 0 to 15 legal */
                if(maxclass<info.partitionclass[j])
                    maxclass=info.partitionclass[j];
            }

            /* save out partition classes */
            for(int j=0;j<maxclass+1;j++)
            {
                opb.write(info.class_dim[j]-1,3); /* 1 to 8 */
                opb.write(info.class_subs[j],2); /* 0 to 3 */
                if(info.class_subs[j]!=0)
                {
                    opb.write(info.class_book[j],8);
                }
                for(int k=0;k<(1<<info.class_subs[j]);k++)
                {
                    opb.write(info.class_subbook[j][k]+1,8);
                }
            }

            /* save out the post list */
            opb.write(info.mult-1,2);     /* only 1,2,3,4 legal now */
            opb.write(ilog2(maxposit),4);
            rangebits=ilog2(maxposit);

            for(int j=0,k=0;j<info.partitions;j++)
            {
                count+=info.class_dim[info.partitionclass[j]];
                for(;k<count;k++)
                {
                    opb.write(info.postlist[k+2],rangebits);
                }
            }
        }