static internal long ReadNumber(BitReader br)
        {
            ulong tmp;
            int   quadsToRead = 0;

            tmp = br.ReadBits(1);
            if (tmp == 0)
            {
                quadsToRead = 0;
            }
            else
            {
                tmp = br.ReadBits(2);
                if (tmp == 0)
                {
                    tmp = br.ReadBits(1);
                    if (tmp == 0)
                    {
                        quadsToRead = 1;
                    }
                    else
                    {
                        quadsToRead = 9;
                    }
                }
                else if (tmp == 1)
                {
                    quadsToRead = 8;
                }
                else if (tmp == 2)
                {
                    quadsToRead = 5;
                }
                else
                {
                    tmp = br.ReadBits(2);
                    if (tmp == 0)
                    {
                        quadsToRead = 2;
                    }
                    else if (tmp == 1)
                    {
                        quadsToRead = 4;
                    }
                    else if (tmp == 2)
                    {
                        tmp = br.ReadBits(1);
                        if (tmp == 0)
                        {
                            quadsToRead = 7;
                        }
                        else if (tmp == 1)
                        {
                            tmp = br.ReadBits(1);
                            if (tmp == 0)
                            {
                                quadsToRead = 3;
                            }
                            else
                            {
                                tmp = br.ReadBits(1);
                                if (tmp == 0)
                                {
                                    quadsToRead = 11;
                                }
                                else
                                {
                                    tmp = br.ReadBits(1);
                                    if (tmp == 0)
                                    {
                                        quadsToRead = 6;
                                    }
                                    else
                                    {
                                        tmp = br.ReadBits(2);
                                        if (tmp == 0)
                                        {
                                            tmp = br.ReadBits(1);
                                            if (tmp == 0)
                                            {
                                                quadsToRead = 16;
                                            }
                                            else
                                            {
                                                quadsToRead = 15;
                                            }
                                        }
                                        else if (tmp == 1)
                                        {
                                            quadsToRead = 14;
                                        }
                                        else if (tmp == 2)
                                        {
                                            quadsToRead = 13;
                                        }
                                        else
                                        {
                                            quadsToRead = 12;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        quadsToRead = 10;
                    }
                }
            }

            return((long)br.ReadBits(4 * quadsToRead));
        }
Exemple #2
0
 /* initialize from the backing store */
 internal Statistics(BitReader br)
 {
     Read(br);
 }