Mercurial > vba-linux
view src/win32/7zip/7z/C/LzFind.h @ 6:458a4f18f3cd
working on lua generation
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:48:33 -0600 |
parents | f9f4f1b99eed |
children |
line wrap: on
line source
1 /* LzFind.h -- Match finder for LZ algorithms2 2008-10-04 : Igor Pavlov : Public domain */4 #ifndef __LZFIND_H5 #define __LZFIND_H7 #include "Types.h"9 typedef UInt32 CLzRef;11 typedef struct _CMatchFinder12 {13 Byte *buffer;14 UInt32 pos;15 UInt32 posLimit;16 UInt32 streamPos;17 UInt32 lenLimit;19 UInt32 cyclicBufferPos;20 UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */22 UInt32 matchMaxLen;23 CLzRef *hash;24 CLzRef *son;25 UInt32 hashMask;26 UInt32 cutValue;28 Byte *bufferBase;29 ISeqInStream *stream;30 int streamEndWasReached;32 UInt32 blockSize;33 UInt32 keepSizeBefore;34 UInt32 keepSizeAfter;36 UInt32 numHashBytes;37 int directInput;38 int btMode;39 /* int skipModeBits; */40 int bigHash;41 UInt32 historySize;42 UInt32 fixedHashSize;43 UInt32 hashSizeSum;44 UInt32 numSons;45 SRes result;46 UInt32 crc[256];47 } CMatchFinder;49 #define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)50 #define Inline_MatchFinder_GetIndexByte(p, index) ((p)->buffer[(Int32)(index)])52 #define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)54 int MatchFinder_NeedMove(CMatchFinder *p);55 Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);56 void MatchFinder_MoveBlock(CMatchFinder *p);57 void MatchFinder_ReadIfRequired(CMatchFinder *p);59 void MatchFinder_Construct(CMatchFinder *p);61 /* Conditions:62 historySize <= 3 GB63 keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB64 */65 int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,66 UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,67 ISzAlloc *alloc);68 void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc);69 void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems);70 void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);72 UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,73 UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,74 UInt32 *distances, UInt32 maxLen);76 /*77 Conditions:78 Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func.79 Mf_GetPointerToCurrentPos_Func's result must be used only before any other function80 */82 typedef void (*Mf_Init_Func)(void *object);83 typedef Byte (*Mf_GetIndexByte_Func)(void *object, Int32 index);84 typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object);85 typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object);86 typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances);87 typedef void (*Mf_Skip_Func)(void *object, UInt32);89 typedef struct _IMatchFinder90 {91 Mf_Init_Func Init;92 Mf_GetIndexByte_Func GetIndexByte;93 Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;94 Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;95 Mf_GetMatches_Func GetMatches;96 Mf_Skip_Func Skip;97 } IMatchFinder;99 void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);101 void MatchFinder_Init(CMatchFinder *p);102 UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);103 UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);104 void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);105 void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);107 #endif