3 #ifndef __BRANCH_X86_2_H
4 #define __BRANCH_X86_2_H
6 #include "../../../Common/MyCom.h"
7 #include "../RangeCoder/RangeCoderBit.h"
8 #include "../../ICoder.h"
13 const int kNumMoveBits = 5;
18 public ICompressCoder2,
23 CEncoder(): _buffer(0) {};
27 COutBuffer _mainStream;
28 COutBuffer _callStream;
29 COutBuffer _jumpStream;
30 NCompress::NRangeCoder::CEncoder _rangeEncoder;
31 NCompress::NRangeCoder::CBitEncoder<kNumMoveBits> _statusEncoder[256 + 2];
36 _mainStream.ReleaseStream();
37 _callStream.ReleaseStream();
38 _jumpStream.ReleaseStream();
39 _rangeEncoder.ReleaseStream();
46 CCoderReleaser(CEncoder *coder): _coder(coder) {}
47 ~CCoderReleaser() { _coder->ReleaseStreams(); }
54 HRESULT CodeReal(ISequentialInStream **inStreams,
55 const UInt64 **inSizes,
57 ISequentialOutStream **outStreams,
58 const UInt64 **outSizes,
60 ICompressProgressInfo *progress);
61 STDMETHOD(Code)(ISequentialInStream **inStreams,
62 const UInt64 **inSizes,
64 ISequentialOutStream **outStreams,
65 const UInt64 **outSizes,
67 ICompressProgressInfo *progress);
73 public ICompressCoder2,
77 CInBuffer _mainInStream;
78 CInBuffer _callStream;
79 CInBuffer _jumpStream;
80 NCompress::NRangeCoder::CDecoder _rangeDecoder;
81 NCompress::NRangeCoder::CBitDecoder<kNumMoveBits> _statusDecoder[256 + 2];
83 COutBuffer _outStream;
87 _mainInStream.ReleaseStream();
88 _callStream.ReleaseStream();
89 _jumpStream.ReleaseStream();
90 _rangeDecoder.ReleaseStream();
91 _outStream.ReleaseStream();
94 HRESULT Flush() { return _outStream.Flush(); }
99 CCoderReleaser(CDecoder *coder): _coder(coder) {}
100 ~CCoderReleaser() { _coder->ReleaseStreams(); }
105 HRESULT CodeReal(ISequentialInStream **inStreams,
106 const UInt64 **inSizes,
108 ISequentialOutStream **outStreams,
109 const UInt64 **outSizes,
110 UInt32 numOutStreams,
111 ICompressProgressInfo *progress);
112 STDMETHOD(Code)(ISequentialInStream **inStreams,
113 const UInt64 **inSizes,
115 ISequentialOutStream **outStreams,
116 const UInt64 **outSizes,
117 UInt32 numOutStreams,
118 ICompressProgressInfo *progress);