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"
10 // {23170F69-40C1-278B-0303-010100000100}
11 #define MyClass2_a(Name, id, subId, encodingId) \
12 DEFINE_GUID(CLSID_CCompressConvert ## Name, \
13 0x23170F69, 0x40C1, 0x278B, 0x03, 0x03, id, subId, 0x00, 0x00, encodingId, 0x00);
15 #define MyClass_a(Name, id, subId) \
16 MyClass2_a(Name ## _Encoder, id, subId, 0x01) \
17 MyClass2_a(Name ## _Decoder, id, subId, 0x00)
19 MyClass_a(BCJ2_x86
, 0x01, 0x1B)
21 const int kNumMoveBits
= 5;
25 class CBCJ2_x86_Encoder
:
26 public ICompressCoder2
,
31 CBCJ2_x86_Encoder(): _buffer(0) {};
35 COutBuffer _mainStream
;
36 COutBuffer _callStream
;
37 COutBuffer _jumpStream
;
38 NCompress::NRangeCoder::CEncoder _rangeEncoder
;
39 NCompress::NRangeCoder::CBitEncoder
<kNumMoveBits
> _statusE8Encoder
[256];
40 NCompress::NRangeCoder::CBitEncoder
<kNumMoveBits
> _statusE9Encoder
;
41 NCompress::NRangeCoder::CBitEncoder
<kNumMoveBits
> _statusJccEncoder
;
46 _mainStream
.ReleaseStream();
47 _callStream
.ReleaseStream();
48 _jumpStream
.ReleaseStream();
49 _rangeEncoder
.ReleaseStream();
54 CBCJ2_x86_Encoder
*_coder
;
56 CCoderReleaser(CBCJ2_x86_Encoder
*coder
): _coder(coder
) {}
57 ~CCoderReleaser() { _coder
->ReleaseStreams(); }
64 HRESULT
CodeReal(ISequentialInStream
**inStreams
,
65 const UInt64
**inSizes
,
67 ISequentialOutStream
**outStreams
,
68 const UInt64
**outSizes
,
70 ICompressProgressInfo
*progress
);
71 STDMETHOD(Code
)(ISequentialInStream
**inStreams
,
72 const UInt64
**inSizes
,
74 ISequentialOutStream
**outStreams
,
75 const UInt64
**outSizes
,
77 ICompressProgressInfo
*progress
);
82 class CBCJ2_x86_Decoder
:
83 public ICompressCoder2
,
87 CInBuffer _mainInStream
;
88 CInBuffer _callStream
;
89 CInBuffer _jumpStream
;
90 NCompress::NRangeCoder::CDecoder _rangeDecoder
;
91 NCompress::NRangeCoder::CBitDecoder
<kNumMoveBits
> _statusE8Decoder
[256];
92 NCompress::NRangeCoder::CBitDecoder
<kNumMoveBits
> _statusE9Decoder
;
93 NCompress::NRangeCoder::CBitDecoder
<kNumMoveBits
> _statusJccDecoder
;
95 COutBuffer _outStream
;
99 _mainInStream
.ReleaseStream();
100 _callStream
.ReleaseStream();
101 _jumpStream
.ReleaseStream();
102 _rangeDecoder
.ReleaseStream();
103 _outStream
.ReleaseStream();
106 HRESULT
Flush() { return _outStream
.Flush(); }
109 CBCJ2_x86_Decoder
*_coder
;
111 CCoderReleaser(CBCJ2_x86_Decoder
*coder
): _coder(coder
) {}
112 ~CCoderReleaser() { _coder
->ReleaseStreams(); }
117 HRESULT
CodeReal(ISequentialInStream
**inStreams
,
118 const UInt64
**inSizes
,
120 ISequentialOutStream
**outStreams
,
121 const UInt64
**outSizes
,
122 UInt32 numOutStreams
,
123 ICompressProgressInfo
*progress
);
124 STDMETHOD(Code
)(ISequentialInStream
**inStreams
,
125 const UInt64
**inSizes
,
127 ISequentialOutStream
**outStreams
,
128 const UInt64
**outSizes
,
129 UInt32 numOutStreams
,
130 ICompressProgressInfo
*progress
);