Parolin 0.7.9 6796
Console (soon DLLs) to do a tar like job
Loading...
Searching...
No Matches
Ppmd7.h
Go to the documentation of this file.
1/* Ppmd7.h -- Ppmd7 (PPMdH) compression codec
22023-04-02 : Igor Pavlov : Public domain
3This code is based on:
4 PPMd var.H (2001): Dmitry Shkarin : Public domain */
5
6
7#ifndef ZIP7_INC_PPMD7_H
8#define ZIP7_INC_PPMD7_H
9
10#include "Ppmd.h"
11
13
14#define PPMD7_MIN_ORDER 2
15#define PPMD7_MAX_ORDER 64
16
17#define PPMD7_MIN_MEM_SIZE (1 << 11)
18#define PPMD7_MAX_MEM_SIZE (0xFFFFFFFF - 12 * 3)
19
20struct CPpmd7_Context_;
21
23
24// MY_CPU_pragma_pack_push_1
25
45
46// MY_CPU_pragma_pop
47
48#define Ppmd7Context_OneState(p) ((CPpmd_State *)&(p)->Union2)
49
50
51
52
53typedef struct
54{
58 IByteInPtr Stream;
60
61
62typedef struct
63{
66 // Byte _dummy_[3];
69 IByteOutPtr Stream;
71
72
73typedef struct
74{
77 unsigned OrderFall, InitEsc, PrevSuccess, MaxOrder, HiBitsFlag;
78 Int32 RunLength, InitRL; /* must be 32-bit at least */
79
83 Byte *Base, *LoUnit, *HiUnit, *Text, *UnitsStart;
84
85
86
87
88 union
89 {
92 } rc;
93
94 Byte Indx2Units[PPMD_NUM_INDEXES + 2]; // +2 for alignment
95 Byte Units2Indx[128];
97
98 Byte NS2BSIndx[256], NS2Indx[256];
99 Byte ExpEscape[16];
100 CPpmd_See DummySee, See[25][16];
101 UInt16 BinSumm[128][64];
102 // int LastSymbol;
103} CPpmd7;
104
105
106void Ppmd7_Construct(CPpmd7 *p);
108void Ppmd7_Free(CPpmd7 *p, ISzAllocPtr alloc);
109void Ppmd7_Init(CPpmd7 *p, unsigned maxOrder);
110#define Ppmd7_WasAllocated(p) ((p)->Base != NULL)
111
112
113/* ---------- Internal Functions ---------- */
114
115#define Ppmd7_GetPtr(p, ptr) Ppmd_GetPtr(p, ptr)
116#define Ppmd7_GetContext(p, ptr) Ppmd_GetPtr_Type(p, ptr, CPpmd7_Context)
117#define Ppmd7_GetStats(p, ctx) Ppmd_GetPtr_Type(p, (ctx)->Union4.Stats, CPpmd_State)
118
119void Ppmd7_Update1(CPpmd7 *p);
120void Ppmd7_Update1_0(CPpmd7 *p);
121void Ppmd7_Update2(CPpmd7 *p);
122
123#define PPMD7_HiBitsFlag_3(sym) ((((unsigned)sym + 0xC0) >> (8 - 3)) & (1 << 3))
124#define PPMD7_HiBitsFlag_4(sym) ((((unsigned)sym + 0xC0) >> (8 - 4)) & (1 << 4))
125// #define PPMD7_HiBitsFlag_3(sym) ((sym) < 0x40 ? 0 : (1 << 3))
126// #define PPMD7_HiBitsFlag_4(sym) ((sym) < 0x40 ? 0 : (1 << 4))
127
128#define Ppmd7_GetBinSumm(p) \
129 &p->BinSumm[(size_t)(unsigned)Ppmd7Context_OneState(p->MinContext)->Freq - 1] \
130 [ p->PrevSuccess + ((p->RunLength >> 26) & 0x20) \
131 + p->NS2BSIndx[(size_t)Ppmd7_GetContext(p, p->MinContext->Suffix)->NumStats - 1] \
132 + PPMD7_HiBitsFlag_4(Ppmd7Context_OneState(p->MinContext)->Symbol) \
133 + (p->HiBitsFlag = PPMD7_HiBitsFlag_3(p->FoundState->Symbol)) ]
134
135CPpmd_See *Ppmd7_MakeEscFreq(CPpmd7 *p, unsigned numMasked, UInt32 *scale);
136
137
138/*
139We support two versions of Ppmd7 (PPMdH) methods that use same CPpmd7 structure:
140 1) Ppmd7a_*: original PPMdH
141 2) Ppmd7z_*: modified PPMdH with 7z Range Coder
142Ppmd7_*: the structures and functions that are common for both versions of PPMd7 (PPMdH)
143*/
144
145/* ---------- Decode ---------- */
146
147#define PPMD7_SYM_END (-1)
148#define PPMD7_SYM_ERROR (-2)
149
150/*
151You must set (CPpmd7::rc.dec.Stream) before Ppmd7*_RangeDec_Init()
152
153Ppmd7*_DecodeSymbol()
154out:
155 >= 0 : decoded byte
156 -1 : PPMD7_SYM_END : End of payload marker
157 -2 : PPMD7_SYM_ERROR : Data error
158*/
159
160/* Ppmd7a_* : original PPMdH */
162#define Ppmd7a_RangeDec_IsFinishedOK(p) ((p)->Code == 0)
164
165/* Ppmd7z_* : modified PPMdH with 7z Range Coder */
167#define Ppmd7z_RangeDec_IsFinishedOK(p) ((p)->Code == 0)
169// Byte *Ppmd7z_DecodeSymbols(CPpmd7 *p, Byte *buf, const Byte *lim);
170
171
172/* ---------- Encode ---------- */
173
176// void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol);
177void Ppmd7z_EncodeSymbols(CPpmd7 *p, const Byte *buf, const Byte *lim);
178
180
181#endif
int BoolInt
Definition 7zTypes.h:259
#define EXTERN_C_BEGIN
Definition 7zTypes.h:20
unsigned long long int UInt64
Definition 7zTypes.h:234
#define EXTERN_C_END
Definition 7zTypes.h:21
void Ppmd7_Update1(CPpmd7 *p)
Definition Ppmd7.c:970
void Ppmd7z_Flush_RangeEnc(CPpmd7 *p)
Definition Ppmd7Enc.c:66
BoolInt Ppmd7z_RangeDec_Init(CPpmd7_RangeDec *p)
Definition Ppmd7Dec.c:16
void Ppmd7z_Init_RangeEnc(CPpmd7 *p)
Definition Ppmd7Enc.c:15
void Ppmd7_Update1_0(CPpmd7 *p)
Definition Ppmd7.c:988
void Ppmd7_Update2(CPpmd7 *p)
Definition Ppmd7.c:1016
BoolInt Ppmd7_Alloc(CPpmd7 *p, UInt32 size, ISzAllocPtr alloc)
Definition Ppmd7.c:92
struct CPpmd7_Context_ CPpmd7_Context
void Ppmd7z_EncodeSymbols(CPpmd7 *p, const Byte *buf, const Byte *lim)
Definition Ppmd7Enc.c:316
BoolInt Ppmd7a_RangeDec_Init(CPpmd7_RangeDec *p)
void Ppmd7_Construct(CPpmd7 *p)
Definition Ppmd7.c:52
void Ppmd7_Init(CPpmd7 *p, unsigned maxOrder)
Definition Ppmd7.c:431
CPpmd_See * Ppmd7_MakeEscFreq(CPpmd7 *p, unsigned numMasked, UInt32 *scale)
Definition Ppmd7.c:930
void Ppmd7_Free(CPpmd7 *p, ISzAllocPtr alloc)
Definition Ppmd7.c:84
int Ppmd7z_DecodeSymbol(CPpmd7 *p)
Definition Ppmd7Dec.c:64
int Ppmd7a_DecodeSymbol(CPpmd7 *p)
#define PPMD_NUM_INDEXES
Definition Ppmd.h:38
#define Ppmd_Ref_Type(type)
Definition Ppmd.h:112
struct CPpmd7_Context_ CPpmd7_Context
UInt32 CPpmd7_Context_Ref
Definition Ppmd7.h:30
UInt32 CPpmd_Void_Ref
Definition Ppmd.h:69
UInt32 CPpmd_State_Ref
Definition Ppmd.h:61
char buf[N_BUF]
Definition spewG.c:36
Definition Ppmd7.h:27
CPpmd_State2 State2
Definition Ppmd7.h:34
CPpmd_State4 State4
Definition Ppmd7.h:40
CPpmd7_Context_Ref Suffix
Definition Ppmd7.h:43
union CPpmd7_Context_::@55 Union2
union CPpmd7_Context_::@56 Union4
CPpmd_State_Ref Stats
Definition Ppmd7.h:39
UInt16 SummFreq
Definition Ppmd7.h:33
UInt16 NumStats
Definition Ppmd7.h:28
Definition Ppmd7.h:54
IByteInPtr Stream
Definition Ppmd7.h:58
UInt32 Low
Definition Ppmd7.h:57
UInt32 Range
Definition Ppmd7.h:55
UInt32 Code
Definition Ppmd7.h:56
Definition Ppmd7.h:74
CPpmd7_RangeDec dec
Definition Ppmd7.h:90
Byte * Base
Definition Ppmd7.h:83
CPpmd_State * FoundState
Definition Ppmd7.h:76
Int32 InitRL
Definition Ppmd7.h:78
UInt32 Size
Definition Ppmd7.h:80
UInt32 GlueCount
Definition Ppmd7.h:81
CPpmd_See DummySee
Definition Ppmd7.h:100
UInt32 AlignOffset
Definition Ppmd7.h:82
CPpmd7z_RangeEnc enc
Definition Ppmd7.h:91
unsigned HiBitsFlag
Definition Ppmd7.h:77
CPpmd7_Context * MaxContext
Definition Ppmd7.h:75
Definition Ppmd7.h:63
UInt32 Range
Definition Ppmd7.h:64
Byte Cache
Definition Ppmd7.h:65
IByteOutPtr Stream
Definition Ppmd7.h:69
UInt64 Low
Definition Ppmd7.h:67
UInt64 CacheSize
Definition Ppmd7.h:68
Definition Ppmd.h:45
Definition Ppmd.h:66
Definition Ppmd.h:72
Definition Ppmd.h:58
Definition 7zTypes.h:460
size_t size
Definition platform.h:559
unsigned int UInt32
Definition bzlib_private.h:45
unsigned short UInt16
Definition bzlib_private.h:47
int Int32
Definition bzlib_private.h:44
unsigned char Byte
Definition zconf.h:391