diff options
Diffstat (limited to 'C/Ppmd8Enc.c')
-rw-r--r-- | C/Ppmd8Enc.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/C/Ppmd8Enc.c b/C/Ppmd8Enc.c index 9e29ef7..b0e34c4 100644 --- a/C/Ppmd8Enc.c +++ b/C/Ppmd8Enc.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* Ppmd8Enc.c -- Ppmd8 (PPMdI) Encoder | 1 | /* Ppmd8Enc.c -- Ppmd8 (PPMdI) Encoder |
2 | 2023-04-02 : Igor Pavlov : Public domain | 2 | 2023-09-07 : Igor Pavlov : Public domain |
3 | This code is based on: | 3 | This code is based on: |
4 | PPMd var.I (2002): Dmitry Shkarin : Public domain | 4 | PPMd var.I (2002): Dmitry Shkarin : Public domain |
5 | Carryless rangecoder (1999): Dmitry Subbotin : Public domain */ | 5 | Carryless rangecoder (1999): Dmitry Subbotin : Public domain */ |
@@ -82,7 +82,7 @@ static void Ppmd8_RangeEnc_Encode(CPpmd8 *p, UInt32 start, UInt32 size, UInt32 t | |||
82 | 82 | ||
83 | void Ppmd8_UpdateModel(CPpmd8 *p); | 83 | void Ppmd8_UpdateModel(CPpmd8 *p); |
84 | 84 | ||
85 | #define MASK(sym) ((unsigned char *)charMask)[sym] | 85 | #define MASK(sym) ((Byte *)charMask)[sym] |
86 | 86 | ||
87 | // Z7_FORCE_INLINE | 87 | // Z7_FORCE_INLINE |
88 | // static | 88 | // static |
@@ -139,8 +139,8 @@ void Ppmd8_EncodeSymbol(CPpmd8 *p, int symbol) | |||
139 | MASK(s->Symbol) = 0; | 139 | MASK(s->Symbol) = 0; |
140 | do | 140 | do |
141 | { | 141 | { |
142 | unsigned sym0 = s2[0].Symbol; | 142 | const unsigned sym0 = s2[0].Symbol; |
143 | unsigned sym1 = s2[1].Symbol; | 143 | const unsigned sym1 = s2[1].Symbol; |
144 | s2 += 2; | 144 | s2 += 2; |
145 | MASK(sym0) = 0; | 145 | MASK(sym0) = 0; |
146 | MASK(sym1) = 0; | 146 | MASK(sym1) = 0; |
@@ -265,16 +265,15 @@ void Ppmd8_EncodeSymbol(CPpmd8 *p, int symbol) | |||
265 | if (num2 != 0) | 265 | if (num2 != 0) |
266 | { | 266 | { |
267 | s += i; | 267 | s += i; |
268 | for (;;) | 268 | do |
269 | { | 269 | { |
270 | unsigned sym0 = s[0].Symbol; | 270 | const unsigned sym0 = s[0].Symbol; |
271 | unsigned sym1 = s[1].Symbol; | 271 | const unsigned sym1 = s[1].Symbol; |
272 | s += 2; | 272 | s += 2; |
273 | sum += (s[-2].Freq & (unsigned)(MASK(sym0))); | 273 | sum += (s[-2].Freq & (unsigned)(MASK(sym0))); |
274 | sum += (s[-1].Freq & (unsigned)(MASK(sym1))); | 274 | sum += (s[-1].Freq & (unsigned)(MASK(sym1))); |
275 | if (--num2 == 0) | ||
276 | break; | ||
277 | } | 275 | } |
276 | while (--num2); | ||
278 | } | 277 | } |
279 | 278 | ||
280 | PPMD8_CORRECT_SUM_RANGE(p, sum) | 279 | PPMD8_CORRECT_SUM_RANGE(p, sum) |