d464d3b59c7bc833a43b60e719520f48f0f8c327
[coreboot.git] / payloads / bayou / util / pbuilder / lzma / C / 7zip / Compress / LZ / BinTree / BinTree.h
1 // BinTree.h\r
2 \r
3 #include "../LZInWindow.h"\r
4 #include "../IMatchFinder.h"\r
5  \r
6 namespace BT_NAMESPACE {\r
7 \r
8 typedef UInt32 CIndex;\r
9 const UInt32 kMaxValForNormalize = (UInt32(1) << 31) - 1;\r
10 \r
11 class CMatchFinder: \r
12   public IMatchFinder,\r
13   public CLZInWindow,\r
14   public CMyUnknownImp,\r
15   public IMatchFinderSetNumPasses\r
16 {\r
17   UInt32 _cyclicBufferPos;\r
18   UInt32 _cyclicBufferSize; // it must be historySize + 1\r
19   UInt32 _matchMaxLen;\r
20   CIndex *_hash;\r
21   CIndex *_son;\r
22   UInt32 _hashMask;\r
23   UInt32 _cutValue;\r
24   UInt32 _hashSizeSum;\r
25 \r
26   void Normalize();\r
27   void FreeThisClassMemory();\r
28   void FreeMemory();\r
29 \r
30   MY_UNKNOWN_IMP\r
31 \r
32   STDMETHOD(SetStream)(ISequentialInStream *inStream);\r
33   STDMETHOD_(void, ReleaseStream)();\r
34   STDMETHOD(Init)();\r
35   HRESULT MovePos();\r
36   STDMETHOD_(Byte, GetIndexByte)(Int32 index);\r
37   STDMETHOD_(UInt32, GetMatchLen)(Int32 index, UInt32 back, UInt32 limit);\r
38   STDMETHOD_(UInt32, GetNumAvailableBytes)();\r
39   STDMETHOD_(const Byte *, GetPointerToCurrentPos)();\r
40   STDMETHOD_(Int32, NeedChangeBufferPos)(UInt32 numCheckBytes);\r
41   STDMETHOD_(void, ChangeBufferPos)();\r
42 \r
43   STDMETHOD(Create)(UInt32 historySize, UInt32 keepAddBufferBefore, \r
44       UInt32 matchMaxLen, UInt32 keepAddBufferAfter);\r
45   STDMETHOD(GetMatches)(UInt32 *distances);\r
46   STDMETHOD(Skip)(UInt32 num);\r
47 \r
48 public:\r
49   CMatchFinder();\r
50   virtual ~CMatchFinder();\r
51   virtual void SetNumPasses(UInt32 numPasses) { _cutValue = numPasses; }\r
52 };\r
53 \r
54 }\r