Esempio n. 1
0
 internal static int decodeNumber(this BitInput input, Decode dec)
 {
     int bits;
     long bitField = input.GetBits() & 0xfffe;
     //        if (bitField < dec.getDecodeLen()[8]) {
     //			if (bitField < dec.getDecodeLen()[4]) {
     //				if (bitField < dec.getDecodeLen()[2]) {
     //					if (bitField < dec.getDecodeLen()[1]) {
     //						bits = 1;
     //					} else {
     //						bits = 2;
     //					}
     //				} else {
     //					if (bitField < dec.getDecodeLen()[3]) {
     //						bits = 3;
     //					} else {
     //						bits = 4;
     //					}
     //				}
     //			} else {
     //				if (bitField < dec.getDecodeLen()[6]) {
     //					if (bitField < dec.getDecodeLen()[5])
     //						bits = 5;
     //					else
     //						bits = 6;
     //				} else {
     //					if (bitField < dec.getDecodeLen()[7]) {
     //						bits = 7;
     //					} else {
     //						bits = 8;
     //					}
     //				}
     //			}
     //		} else {
     //			if (bitField < dec.getDecodeLen()[12]) {
     //				if (bitField < dec.getDecodeLen()[10])
     //					if (bitField < dec.getDecodeLen()[9])
     //						bits = 9;
     //					else
     //						bits = 10;
     //				else if (bitField < dec.getDecodeLen()[11])
     //					bits = 11;
     //				else
     //					bits = 12;
     //			} else {
     //				if (bitField < dec.getDecodeLen()[14]) {
     //					if (bitField < dec.getDecodeLen()[13]) {
     //						bits = 13;
     //					} else {
     //						bits = 14;
     //					}
     //				} else {
     //					bits = 15;
     //				}
     //			}
     //		}
     //		addbits(bits);
     //		int N = dec.getDecodePos()[bits]
     //				+ (((int) bitField - dec.getDecodeLen()[bits - 1]) >>> (16 - bits));
     //		if (N >= dec.getMaxNum()) {
     //			N = 0;
     //		}
     //		return (dec.getDecodeNum()[N]);
     int[] decodeLen = dec.DecodeLen;
     if (bitField < decodeLen[8])
     {
         if (bitField < decodeLen[4])
         {
             if (bitField < decodeLen[2])
             {
                 if (bitField < decodeLen[1])
                 {
                     bits = 1;
                 }
                 else
                 {
                     bits = 2;
                 }
             }
             else
             {
                 if (bitField < decodeLen[3])
                 {
                     bits = 3;
                 }
                 else
                 {
                     bits = 4;
                 }
             }
         }
         else
         {
             if (bitField < decodeLen[6])
             {
                 if (bitField < decodeLen[5])
                     bits = 5;
                 else
                     bits = 6;
             }
             else
             {
                 if (bitField < decodeLen[7])
                 {
                     bits = 7;
                 }
                 else
                 {
                     bits = 8;
                 }
             }
         }
     }
     else
     {
         if (bitField < decodeLen[12])
         {
             if (bitField < decodeLen[10])
                 if (bitField < decodeLen[9])
                     bits = 9;
                 else
                     bits = 10;
             else if (bitField < decodeLen[11])
                 bits = 11;
             else
                 bits = 12;
         }
         else
         {
             if (bitField < decodeLen[14])
             {
                 if (bitField < decodeLen[13])
                 {
                     bits = 13;
                 }
                 else
                 {
                     bits = 14;
                 }
             }
             else
             {
                 bits = 15;
             }
         }
     }
     input.AddBits(bits);
     int N = dec.DecodePos[bits] + (Utility.URShift(((int)bitField - decodeLen[bits - 1]), (16 - bits)));
     if (N >= dec.MaxNum)
     {
         N = 0;
     }
     return (dec.DecodeNum[N]);
 }
Esempio n. 2
0
 public static byte AddBit(this byte b, byte bitIndex)
 {
     checkByteBitIndex(bitIndex);
     return b.AddBits((byte)(1 << bitIndex));
 }