public static UInt32 ReverseGetPrice(BitEncoder[] Models, UInt32 startIndex,
                                      int NumBitLevels, UInt32 symbol)
 {
     UInt32 price = 0;
     UInt32 m = 1;
     for (int i = NumBitLevels; i > 0; i--)
     {
         UInt32 bit = symbol & 1;
         symbol >>= 1;
         price += Models[startIndex + m].GetPrice(bit);
         m = (m << 1) | bit;
     }
     return price;
 }
 public static void ReverseEncode(BitEncoder[] Models, UInt32 startIndex,
                                  Encoder rangeEncoder, int NumBitLevels, UInt32 symbol)
 {
     UInt32 m = 1;
     for (int i = 0; i < NumBitLevels; i++)
     {
         UInt32 bit = symbol & 1;
         Models[startIndex + m].Encode(rangeEncoder, bit);
         m = (m << 1) | bit;
         symbol >>= 1;
     }
 }