Blame libarchive/archive_ppmd7_private.h

Packit 08bd4c
/* Ppmd7.h -- PPMdH compression codec
Packit 08bd4c
2010-03-12 : Igor Pavlov : Public domain
Packit 08bd4c
This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */
Packit 08bd4c
Packit 08bd4c
/* This code supports virtual RangeDecoder and includes the implementation
Packit 08bd4c
of RangeCoder from 7z, instead of RangeCoder from original PPMd var.H.
Packit 08bd4c
If you need the compatibility with original PPMd var.H, you can use external RangeDecoder */
Packit 08bd4c
Packit 08bd4c
#ifndef __LIBARCHIVE_BUILD
Packit 08bd4c
#error This header is only to be used internally to libarchive.
Packit 08bd4c
#endif
Packit 08bd4c
Packit 08bd4c
#ifndef ARCHIVE_PPMD7_PRIVATE_H_INCLUDED
Packit 08bd4c
#define ARCHIVE_PPMD7_PRIVATE_H_INCLUDED
Packit 08bd4c
Packit 08bd4c
#include "archive_ppmd_private.h"
Packit 08bd4c
Packit 08bd4c
#define PPMD7_MIN_ORDER 2
Packit 08bd4c
#define PPMD7_MAX_ORDER 64
Packit 08bd4c
Packit 08bd4c
#define PPMD7_MIN_MEM_SIZE (1 << 11)
Packit 08bd4c
#define PPMD7_MAX_MEM_SIZE (0xFFFFFFFFu - 12 * 3)
Packit 08bd4c
Packit 08bd4c
struct CPpmd7_Context_;
Packit 08bd4c
Packit 08bd4c
typedef
Packit 08bd4c
  #ifdef PPMD_32BIT
Packit 08bd4c
    struct CPpmd7_Context_ *
Packit 08bd4c
  #else
Packit 08bd4c
    UInt32
Packit 08bd4c
  #endif
Packit 08bd4c
  CPpmd7_Context_Ref;
Packit 08bd4c
Packit 08bd4c
typedef struct CPpmd7_Context_
Packit 08bd4c
{
Packit 08bd4c
  UInt16 NumStats;
Packit 08bd4c
  UInt16 SummFreq;
Packit 08bd4c
  CPpmd_State_Ref Stats;
Packit 08bd4c
  CPpmd7_Context_Ref Suffix;
Packit 08bd4c
} CPpmd7_Context;
Packit 08bd4c
Packit 08bd4c
#define Ppmd7Context_OneState(p) ((CPpmd_State *)&(p)->SummFreq)
Packit 08bd4c
Packit 08bd4c
typedef struct
Packit 08bd4c
{
Packit 08bd4c
  CPpmd7_Context *MinContext, *MaxContext;
Packit 08bd4c
  CPpmd_State *FoundState;
Packit 08bd4c
  unsigned OrderFall, InitEsc, PrevSuccess, MaxOrder, HiBitsFlag;
Packit 08bd4c
  Int32 RunLength, InitRL; /* must be 32-bit at least */
Packit 08bd4c
Packit 08bd4c
  UInt32 Size;
Packit 08bd4c
  UInt32 GlueCount;
Packit 08bd4c
  Byte *Base, *LoUnit, *HiUnit, *Text, *UnitsStart;
Packit 08bd4c
  UInt32 AlignOffset;
Packit 08bd4c
Packit 08bd4c
  Byte Indx2Units[PPMD_NUM_INDEXES];
Packit 08bd4c
  Byte Units2Indx[128];
Packit 08bd4c
  CPpmd_Void_Ref FreeList[PPMD_NUM_INDEXES];
Packit 08bd4c
  Byte NS2Indx[256], NS2BSIndx[256], HB2Flag[256];
Packit 08bd4c
  CPpmd_See DummySee, See[25][16];
Packit 08bd4c
  UInt16 BinSumm[128][64];
Packit 08bd4c
} CPpmd7;
Packit 08bd4c
Packit 08bd4c
/* ---------- Decode ---------- */
Packit 08bd4c
Packit 08bd4c
typedef struct
Packit 08bd4c
{
Packit 08bd4c
  UInt32 (*GetThreshold)(void *p, UInt32 total);
Packit 08bd4c
  void (*Decode)(void *p, UInt32 start, UInt32 size);
Packit 08bd4c
  UInt32 (*DecodeBit)(void *p, UInt32 size0);
Packit 08bd4c
} IPpmd7_RangeDec;
Packit 08bd4c
Packit 08bd4c
typedef struct
Packit 08bd4c
{
Packit 08bd4c
  IPpmd7_RangeDec p;
Packit 08bd4c
  UInt32 Range;
Packit 08bd4c
  UInt32 Code;
Packit 08bd4c
  UInt32 Low;
Packit 08bd4c
  UInt32 Bottom;
Packit 08bd4c
  IByteIn *Stream;
Packit 08bd4c
} CPpmd7z_RangeDec;
Packit 08bd4c
Packit 08bd4c
/* ---------- Encode ---------- */
Packit 08bd4c
Packit 08bd4c
typedef struct
Packit 08bd4c
{
Packit 08bd4c
  UInt64 Low;
Packit 08bd4c
  UInt32 Range;
Packit 08bd4c
  Byte Cache;
Packit 08bd4c
  UInt64 CacheSize;
Packit 08bd4c
  IByteOut *Stream;
Packit 08bd4c
} CPpmd7z_RangeEnc;
Packit 08bd4c
Packit 08bd4c
typedef struct
Packit 08bd4c
{
Packit 08bd4c
  /* Base Functions */
Packit 08bd4c
  void (*Ppmd7_Construct)(CPpmd7 *p);
Packit 08bd4c
  Bool (*Ppmd7_Alloc)(CPpmd7 *p, UInt32 size, ISzAlloc *alloc);
Packit 08bd4c
  void (*Ppmd7_Free)(CPpmd7 *p, ISzAlloc *alloc);
Packit 08bd4c
  void (*Ppmd7_Init)(CPpmd7 *p, unsigned maxOrder);
Packit 08bd4c
  #define Ppmd7_WasAllocated(p) ((p)->Base != NULL)
Packit 08bd4c
Packit 08bd4c
  /* Decode Functions */
Packit 08bd4c
  void (*Ppmd7z_RangeDec_CreateVTable)(CPpmd7z_RangeDec *p);
Packit 08bd4c
  void (*PpmdRAR_RangeDec_CreateVTable)(CPpmd7z_RangeDec *p);
Packit 08bd4c
  Bool (*Ppmd7z_RangeDec_Init)(CPpmd7z_RangeDec *p);
Packit 08bd4c
  Bool (*PpmdRAR_RangeDec_Init)(CPpmd7z_RangeDec *p);
Packit 08bd4c
  #define Ppmd7z_RangeDec_IsFinishedOK(p) ((p)->Code == 0)
Packit 08bd4c
  int (*Ppmd7_DecodeSymbol)(CPpmd7 *p, IPpmd7_RangeDec *rc);
Packit 08bd4c
Packit 08bd4c
  /* Encode Functions */
Packit 08bd4c
  void (*Ppmd7z_RangeEnc_Init)(CPpmd7z_RangeEnc *p);
Packit 08bd4c
  void (*Ppmd7z_RangeEnc_FlushData)(CPpmd7z_RangeEnc *p);
Packit 08bd4c
Packit 08bd4c
  void (*Ppmd7_EncodeSymbol)(CPpmd7 *p, CPpmd7z_RangeEnc *rc, int symbol);
Packit 08bd4c
} IPpmd7;
Packit 08bd4c
Packit 08bd4c
extern const IPpmd7 __archive_ppmd7_functions;
Packit 08bd4c
#endif