aboutsummaryrefslogtreecommitdiff
path: root/C/Ppmd8.c
diff options
context:
space:
mode:
Diffstat (limited to 'C/Ppmd8.c')
-rw-r--r--C/Ppmd8.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/C/Ppmd8.c b/C/Ppmd8.c
index 28abf27..c6bdd86 100644
--- a/C/Ppmd8.c
+++ b/C/Ppmd8.c
@@ -1,5 +1,5 @@
/* Ppmd8.c -- PPMdI codec
-2023-04-02 : Igor Pavlov : Public domain
+2023-09-07 : Igor Pavlov : Public domain
This code is based on PPMd var.I (2002): Dmitry Shkarin : Public domain */
#include "Precomp.h"
@@ -302,8 +302,17 @@ static void *Ppmd8_AllocUnits(CPpmd8 *p, unsigned indx)
#define MEM_12_CPY(dest, src, num) \
- { UInt32 *d = (UInt32 *)dest; const UInt32 *z = (const UInt32 *)src; UInt32 n = num; \
- do { d[0] = z[0]; d[1] = z[1]; d[2] = z[2]; z += 3; d += 3; } while (--n); }
+ { UInt32 *d = (UInt32 *)(dest); \
+ const UInt32 *z = (const UInt32 *)(src); \
+ unsigned n = (num); \
+ do { \
+ d[0] = z[0]; \
+ d[1] = z[1]; \
+ d[2] = z[2]; \
+ z += 3; \
+ d += 3; \
+ } while (--n); \
+ }
@@ -1215,8 +1224,8 @@ void Ppmd8_UpdateModel(CPpmd8 *p)
if ((ns1 & 1) != 0)
{
/* Expand for one UNIT */
- unsigned oldNU = (ns1 + 1) >> 1;
- unsigned i = U2I(oldNU);
+ const unsigned oldNU = (ns1 + 1) >> 1;
+ const unsigned i = U2I(oldNU);
if (i != U2I((size_t)oldNU + 1))
{
void *ptr = Ppmd8_AllocUnits(p, i + 1);
@@ -1235,7 +1244,7 @@ void Ppmd8_UpdateModel(CPpmd8 *p)
sum = c->Union2.SummFreq;
/* max increase of Escape_Freq is 1 here.
an average increase is 1/3 per symbol */
- sum += (3 * ns1 + 1 < ns);
+ sum += (UInt32)(unsigned)(3 * ns1 + 1 < ns);
/* original PPMdH uses 16-bit variable for (sum) here.
But (sum < ???). Do we need to truncate (sum) to 16-bit */
// sum = (UInt16)sum;
@@ -1265,7 +1274,7 @@ void Ppmd8_UpdateModel(CPpmd8 *p)
s->Freq = (Byte)freq;
- sum = freq + p->InitEsc + (ns > 2); // Ppmd8 (> 2)
+ sum = (UInt32)(freq + p->InitEsc + (ns > 2)); // Ppmd8 (> 2)
}
}
@@ -1437,10 +1446,10 @@ CPpmd_See *Ppmd8_MakeEscFreq(CPpmd8 *p, unsigned numMasked1, UInt32 *escFreq)
{
// if (see->Summ) field is larger than 16-bit, we need only low 16 bits of Summ
- unsigned summ = (UInt16)see->Summ; // & 0xFFFF
- unsigned r = (summ >> see->Shift);
+ const unsigned summ = (UInt16)see->Summ; // & 0xFFFF
+ const unsigned r = (summ >> see->Shift);
see->Summ = (UInt16)(summ - r);
- *escFreq = r + (r == 0);
+ *escFreq = (UInt32)(r + (r == 0));
}
}
else
@@ -1485,9 +1494,9 @@ void Ppmd8_Update1_0(CPpmd8 *p)
CPpmd_State *s = p->FoundState;
CPpmd8_Context *mc = p->MinContext;
unsigned freq = s->Freq;
- unsigned summFreq = mc->Union2.SummFreq;
+ const unsigned summFreq = mc->Union2.SummFreq;
p->PrevSuccess = (2 * freq >= summFreq); // Ppmd8 (>=)
- p->RunLength += (int)p->PrevSuccess;
+ p->RunLength += (Int32)p->PrevSuccess;
mc->Union2.SummFreq = (UInt16)(summFreq + 4);
freq += 4;
s->Freq = (Byte)freq;