Annotation of elwix/tools/oldlzma/SRC/7zip/Compress/Branch/x86_2.h, revision 1.1
1.1 ! misho 1: // x86_2.h
! 2:
! 3: #ifndef __BRANCH_X86_2_H
! 4: #define __BRANCH_X86_2_H
! 5:
! 6: #include "../../../Common/MyCom.h"
! 7: #include "../RangeCoder/RangeCoderBit.h"
! 8: #include "../../ICoder.h"
! 9:
! 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);
! 14:
! 15: #define MyClass_a(Name, id, subId) \
! 16: MyClass2_a(Name ## _Encoder, id, subId, 0x01) \
! 17: MyClass2_a(Name ## _Decoder, id, subId, 0x00)
! 18:
! 19: MyClass_a(BCJ2_x86, 0x01, 0x1B)
! 20:
! 21: const int kNumMoveBits = 5;
! 22:
! 23: #ifndef EXTRACT_ONLY
! 24:
! 25: class CBCJ2_x86_Encoder:
! 26: public ICompressCoder2,
! 27: public CMyUnknownImp
! 28: {
! 29: Byte *_buffer;
! 30: public:
! 31: CBCJ2_x86_Encoder(): _buffer(0) {};
! 32: ~CBCJ2_x86_Encoder();
! 33: bool Create();
! 34:
! 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;
! 42:
! 43: HRESULT Flush();
! 44: void ReleaseStreams()
! 45: {
! 46: _mainStream.ReleaseStream();
! 47: _callStream.ReleaseStream();
! 48: _jumpStream.ReleaseStream();
! 49: _rangeEncoder.ReleaseStream();
! 50: }
! 51:
! 52: class CCoderReleaser
! 53: {
! 54: CBCJ2_x86_Encoder *_coder;
! 55: public:
! 56: CCoderReleaser(CBCJ2_x86_Encoder *coder): _coder(coder) {}
! 57: ~CCoderReleaser() { _coder->ReleaseStreams(); }
! 58: };
! 59:
! 60: public:
! 61:
! 62: MY_UNKNOWN_IMP
! 63:
! 64: HRESULT CodeReal(ISequentialInStream **inStreams,
! 65: const UInt64 **inSizes,
! 66: UInt32 numInStreams,
! 67: ISequentialOutStream **outStreams,
! 68: const UInt64 **outSizes,
! 69: UInt32 numOutStreams,
! 70: ICompressProgressInfo *progress);
! 71: STDMETHOD(Code)(ISequentialInStream **inStreams,
! 72: const UInt64 **inSizes,
! 73: UInt32 numInStreams,
! 74: ISequentialOutStream **outStreams,
! 75: const UInt64 **outSizes,
! 76: UInt32 numOutStreams,
! 77: ICompressProgressInfo *progress);
! 78: };
! 79:
! 80: #endif
! 81:
! 82: class CBCJ2_x86_Decoder:
! 83: public ICompressCoder2,
! 84: public CMyUnknownImp
! 85: {
! 86: public:
! 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;
! 94:
! 95: COutBuffer _outStream;
! 96:
! 97: void ReleaseStreams()
! 98: {
! 99: _mainInStream.ReleaseStream();
! 100: _callStream.ReleaseStream();
! 101: _jumpStream.ReleaseStream();
! 102: _rangeDecoder.ReleaseStream();
! 103: _outStream.ReleaseStream();
! 104: }
! 105:
! 106: HRESULT Flush() { return _outStream.Flush(); }
! 107: class CCoderReleaser
! 108: {
! 109: CBCJ2_x86_Decoder *_coder;
! 110: public:
! 111: CCoderReleaser(CBCJ2_x86_Decoder *coder): _coder(coder) {}
! 112: ~CCoderReleaser() { _coder->ReleaseStreams(); }
! 113: };
! 114:
! 115: public:
! 116: MY_UNKNOWN_IMP
! 117: HRESULT CodeReal(ISequentialInStream **inStreams,
! 118: const UInt64 **inSizes,
! 119: UInt32 numInStreams,
! 120: ISequentialOutStream **outStreams,
! 121: const UInt64 **outSizes,
! 122: UInt32 numOutStreams,
! 123: ICompressProgressInfo *progress);
! 124: STDMETHOD(Code)(ISequentialInStream **inStreams,
! 125: const UInt64 **inSizes,
! 126: UInt32 numInStreams,
! 127: ISequentialOutStream **outStreams,
! 128: const UInt64 **outSizes,
! 129: UInt32 numOutStreams,
! 130: ICompressProgressInfo *progress);
! 131: };
! 132:
! 133: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>