Annotation of elwix/tools/oldlzma/SRC/7zip/Compress/Branch/x86_2.h, revision 1.1.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>