xref: /aosp_15_r20/external/lzma/CPP/7zip/Compress/LzfseDecoder.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // LzfseDecoder.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_LZFSE_DECODER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_LZFSE_DECODER_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyBuffer.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyCom.h"
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker #include "../ICoder.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #include "../Common/InBuffer.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker #include "LzOutWindow.h"
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker namespace NCompress {
16*f6dc9357SAndroid Build Coastguard Worker namespace NLzfse {
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_1(
19*f6dc9357SAndroid Build Coastguard Worker   CDecoder
20*f6dc9357SAndroid Build Coastguard Worker   , ICompressCoder
21*f6dc9357SAndroid Build Coastguard Worker )
22*f6dc9357SAndroid Build Coastguard Worker   CLzOutWindow m_OutWindowStream;
23*f6dc9357SAndroid Build Coastguard Worker   CInBuffer m_InStream;
24*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer _literals;
25*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer _buffer;
26*f6dc9357SAndroid Build Coastguard Worker 
27*f6dc9357SAndroid Build Coastguard Worker   class CCoderReleaser
28*f6dc9357SAndroid Build Coastguard Worker   {
29*f6dc9357SAndroid Build Coastguard Worker     CDecoder *m_Coder;
30*f6dc9357SAndroid Build Coastguard Worker   public:
31*f6dc9357SAndroid Build Coastguard Worker     bool NeedFlush;
CCoderReleaser(CDecoder * coder)32*f6dc9357SAndroid Build Coastguard Worker     CCoderReleaser(CDecoder *coder): m_Coder(coder), NeedFlush(true) {}
~CCoderReleaser()33*f6dc9357SAndroid Build Coastguard Worker     ~CCoderReleaser()
34*f6dc9357SAndroid Build Coastguard Worker     {
35*f6dc9357SAndroid Build Coastguard Worker       if (NeedFlush)
36*f6dc9357SAndroid Build Coastguard Worker         m_Coder->m_OutWindowStream.Flush();
37*f6dc9357SAndroid Build Coastguard Worker     }
38*f6dc9357SAndroid Build Coastguard Worker   };
39*f6dc9357SAndroid Build Coastguard Worker   friend class CCoderReleaser;
40*f6dc9357SAndroid Build Coastguard Worker 
41*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetUInt32(UInt32 &val);
42*f6dc9357SAndroid Build Coastguard Worker 
43*f6dc9357SAndroid Build Coastguard Worker   HRESULT DecodeUncompressed(UInt32 unpackSize);
44*f6dc9357SAndroid Build Coastguard Worker   HRESULT DecodeLzvn(UInt32 unpackSize, UInt32 packSize);
45*f6dc9357SAndroid Build Coastguard Worker   HRESULT DecodeLzfse(UInt32 unpackSize, Byte version);
46*f6dc9357SAndroid Build Coastguard Worker 
47*f6dc9357SAndroid Build Coastguard Worker   HRESULT CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream,
48*f6dc9357SAndroid Build Coastguard Worker       const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
49*f6dc9357SAndroid Build Coastguard Worker public:
50*f6dc9357SAndroid Build Coastguard Worker   bool LzvnMode;
51*f6dc9357SAndroid Build Coastguard Worker 
CDecoder()52*f6dc9357SAndroid Build Coastguard Worker   CDecoder():
53*f6dc9357SAndroid Build Coastguard Worker     LzvnMode(false)
54*f6dc9357SAndroid Build Coastguard Worker     {}
55*f6dc9357SAndroid Build Coastguard Worker 
56*f6dc9357SAndroid Build Coastguard Worker   // sizes are checked in Code()
57*f6dc9357SAndroid Build Coastguard Worker   // UInt64 GetInputProcessedSize() const { return m_InStream.GetProcessedSize(); }
58*f6dc9357SAndroid Build Coastguard Worker   // UInt64 GetOutputProcessedSize() const { return m_OutWindowStream.GetProcessedSize(); }
59*f6dc9357SAndroid Build Coastguard Worker };
60*f6dc9357SAndroid Build Coastguard Worker 
61*f6dc9357SAndroid Build Coastguard Worker }}
62*f6dc9357SAndroid Build Coastguard Worker 
63*f6dc9357SAndroid Build Coastguard Worker #endif
64