| OLD | NEW |
| (Empty) |
| 1 package SevenZip.Compression.RangeCoder; | |
| 2 import java.io.IOException; | |
| 3 | |
| 4 public class Decoder | |
| 5 { | |
| 6 static final int kTopMask = ~((1 << 24) - 1); | |
| 7 | |
| 8 static final int kNumBitModelTotalBits = 11; | |
| 9 static final int kBitModelTotal = (1 << kNumBitModelTotalBits); | |
| 10 static final int kNumMoveBits = 5; | |
| 11 | |
| 12 int Range; | |
| 13 int Code; | |
| 14 | |
| 15 java.io.InputStream Stream; | |
| 16 | |
| 17 public final void SetStream(java.io.InputStream stream) | |
| 18 { | |
| 19 Stream = stream; | |
| 20 } | |
| 21 | |
| 22 public final void ReleaseStream() | |
| 23 { | |
| 24 Stream = null; | |
| 25 } | |
| 26 | |
| 27 public final void Init() throws IOException | |
| 28 { | |
| 29 Code = 0; | |
| 30 Range = -1; | |
| 31 for (int i = 0; i < 5; i++) | |
| 32 Code = (Code << 8) | Stream.read(); | |
| 33 } | |
| 34 | |
| 35 public final int DecodeDirectBits(int numTotalBits) throws IOException | |
| 36 { | |
| 37 int result = 0; | |
| 38 for (int i = numTotalBits; i != 0; i--) | |
| 39 { | |
| 40 Range >>>= 1; | |
| 41 int t = ((Code - Range) >>> 31); | |
| 42 Code -= Range & (t - 1); | |
| 43 result = (result << 1) | (1 - t); | |
| 44 | |
| 45 if ((Range & kTopMask) == 0) | |
| 46 { | |
| 47 Code = (Code << 8) | Stream.read(); | |
| 48 Range <<= 8; | |
| 49 } | |
| 50 } | |
| 51 return result; | |
| 52 } | |
| 53 | |
| 54 public int DecodeBit(short []probs, int index) throws IOException | |
| 55 { | |
| 56 int prob = probs[index]; | |
| 57 int newBound = (Range >>> kNumBitModelTotalBits) * prob; | |
| 58 if ((Code ^ 0x80000000) < (newBound ^ 0x80000000)) | |
| 59 { | |
| 60 Range = newBound; | |
| 61 probs[index] = (short)(prob + ((kBitModelTotal - prob) >
>> kNumMoveBits)); | |
| 62 if ((Range & kTopMask) == 0) | |
| 63 { | |
| 64 Code = (Code << 8) | Stream.read(); | |
| 65 Range <<= 8; | |
| 66 } | |
| 67 return 0; | |
| 68 } | |
| 69 else | |
| 70 { | |
| 71 Range -= newBound; | |
| 72 Code -= newBound; | |
| 73 probs[index] = (short)(prob - ((prob) >>> kNumMoveBits))
; | |
| 74 if ((Range & kTopMask) == 0) | |
| 75 { | |
| 76 Code = (Code << 8) | Stream.read(); | |
| 77 Range <<= 8; | |
| 78 } | |
| 79 return 1; | |
| 80 } | |
| 81 } | |
| 82 | |
| 83 public static void InitBitModels(short []probs) | |
| 84 { | |
| 85 for (int i = 0; i < probs.length; i++) | |
| 86 probs[i] = (kBitModelTotal >>> 1); | |
| 87 } | |
| 88 } | |
| OLD | NEW |