mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-16 01:11:28 +00:00
718112a8fe
Currently none of these is being used, but eventually they will, once more code gets ported over. So it's better to have them right away and avoid editing the project file too much, only to revert that later.
121 lines
3.4 KiB
C
121 lines
3.4 KiB
C
/* LzFind.h -- Match finder for LZ algorithms
|
|
2017-06-10 : Igor Pavlov : Public domain */
|
|
|
|
#ifndef __LZ_FIND_H
|
|
#define __LZ_FIND_H
|
|
|
|
#include "7zTypes.h"
|
|
|
|
EXTERN_C_BEGIN
|
|
|
|
typedef UInt32 CLzRef;
|
|
|
|
typedef struct _CMatchFinder
|
|
{
|
|
Byte *buffer;
|
|
UInt32 pos;
|
|
UInt32 posLimit;
|
|
UInt32 streamPos;
|
|
UInt32 lenLimit;
|
|
|
|
UInt32 cyclicBufferPos;
|
|
UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */
|
|
|
|
Byte streamEndWasReached;
|
|
Byte btMode;
|
|
Byte bigHash;
|
|
Byte directInput;
|
|
|
|
UInt32 matchMaxLen;
|
|
CLzRef *hash;
|
|
CLzRef *son;
|
|
UInt32 hashMask;
|
|
UInt32 cutValue;
|
|
|
|
Byte *bufferBase;
|
|
ISeqInStream *stream;
|
|
|
|
UInt32 blockSize;
|
|
UInt32 keepSizeBefore;
|
|
UInt32 keepSizeAfter;
|
|
|
|
UInt32 numHashBytes;
|
|
size_t directInputRem;
|
|
UInt32 historySize;
|
|
UInt32 fixedHashSize;
|
|
UInt32 hashSizeSum;
|
|
SRes result;
|
|
UInt32 crc[256];
|
|
size_t numRefs;
|
|
|
|
UInt64 expectedDataSize;
|
|
} CMatchFinder;
|
|
|
|
#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)
|
|
|
|
#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
|
|
|
|
#define Inline_MatchFinder_IsFinishedOK(p) \
|
|
((p)->streamEndWasReached \
|
|
&& (p)->streamPos == (p)->pos \
|
|
&& (!(p)->directInput || (p)->directInputRem == 0))
|
|
|
|
int MatchFinder_NeedMove(CMatchFinder *p);
|
|
Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);
|
|
void MatchFinder_MoveBlock(CMatchFinder *p);
|
|
void MatchFinder_ReadIfRequired(CMatchFinder *p);
|
|
|
|
void MatchFinder_Construct(CMatchFinder *p);
|
|
|
|
/* Conditions:
|
|
historySize <= 3 GB
|
|
keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB
|
|
*/
|
|
int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
|
|
UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
|
|
ISzAllocPtr alloc);
|
|
void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc);
|
|
void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems);
|
|
void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);
|
|
|
|
UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,
|
|
UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
|
|
UInt32 *distances, UInt32 maxLen);
|
|
|
|
/*
|
|
Conditions:
|
|
Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func.
|
|
Mf_GetPointerToCurrentPos_Func's result must be used only before any other function
|
|
*/
|
|
|
|
typedef void (*Mf_Init_Func)(void *object);
|
|
typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object);
|
|
typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object);
|
|
typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances);
|
|
typedef void (*Mf_Skip_Func)(void *object, UInt32);
|
|
|
|
typedef struct _IMatchFinder
|
|
{
|
|
Mf_Init_Func Init;
|
|
Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;
|
|
Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;
|
|
Mf_GetMatches_Func GetMatches;
|
|
Mf_Skip_Func Skip;
|
|
} IMatchFinder;
|
|
|
|
void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);
|
|
|
|
void MatchFinder_Init_LowHash(CMatchFinder *p);
|
|
void MatchFinder_Init_HighHash(CMatchFinder *p);
|
|
void MatchFinder_Init_3(CMatchFinder *p, int readData);
|
|
void MatchFinder_Init(CMatchFinder *p);
|
|
|
|
UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
|
|
UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
|
|
|
|
void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
|
|
void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
|
|
|
|
EXTERN_C_END
|
|
|
|
#endif
|