Mercurial > vba-linux
view src/win32/7zip/7z/CPP/7zip/Compress/Bcj2Coder.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line source
1 // Bcj2Coder.h3 #ifndef __COMPRESS_BCJ2_CODER_H4 #define __COMPRESS_BCJ2_CODER_H6 #include "../../Common/MyCom.h"8 #include "../ICoder.h"10 #include "RangeCoderBit.h"12 namespace NCompress {13 namespace NBcj2 {15 const int kNumMoveBits = 5;17 #ifndef EXTRACT_ONLY19 class CEncoder:20 public ICompressCoder2,21 public CMyUnknownImp22 {23 Byte *_buffer;24 public:25 CEncoder(): _buffer(0) {};26 ~CEncoder();27 bool Create();29 COutBuffer _mainStream;30 COutBuffer _callStream;31 COutBuffer _jumpStream;32 NCompress::NRangeCoder::CEncoder _rangeEncoder;33 NCompress::NRangeCoder::CBitEncoder<kNumMoveBits> _statusEncoder[256 + 2];35 HRESULT Flush();36 void ReleaseStreams()37 {38 _mainStream.ReleaseStream();39 _callStream.ReleaseStream();40 _jumpStream.ReleaseStream();41 _rangeEncoder.ReleaseStream();42 }44 class CCoderReleaser45 {46 CEncoder *_coder;47 public:48 CCoderReleaser(CEncoder *coder): _coder(coder) {}49 ~CCoderReleaser() { _coder->ReleaseStreams(); }50 };52 public:54 MY_UNKNOWN_IMP56 HRESULT CodeReal(ISequentialInStream **inStreams,57 const UInt64 **inSizes,58 UInt32 numInStreams,59 ISequentialOutStream **outStreams,60 const UInt64 **outSizes,61 UInt32 numOutStreams,62 ICompressProgressInfo *progress);63 STDMETHOD(Code)(ISequentialInStream **inStreams,64 const UInt64 **inSizes,65 UInt32 numInStreams,66 ISequentialOutStream **outStreams,67 const UInt64 **outSizes,68 UInt32 numOutStreams,69 ICompressProgressInfo *progress);70 };72 #endif74 class CDecoder:75 public ICompressCoder2,76 public CMyUnknownImp77 {78 public:79 CInBuffer _mainInStream;80 CInBuffer _callStream;81 CInBuffer _jumpStream;82 NCompress::NRangeCoder::CDecoder _rangeDecoder;83 NCompress::NRangeCoder::CBitDecoder<kNumMoveBits> _statusDecoder[256 + 2];85 COutBuffer _outStream;87 void ReleaseStreams()88 {89 _mainInStream.ReleaseStream();90 _callStream.ReleaseStream();91 _jumpStream.ReleaseStream();92 _rangeDecoder.ReleaseStream();93 _outStream.ReleaseStream();94 }96 HRESULT Flush() { return _outStream.Flush(); }97 class CCoderReleaser98 {99 CDecoder *_coder;100 public:101 CCoderReleaser(CDecoder *coder): _coder(coder) {}102 ~CCoderReleaser() { _coder->ReleaseStreams(); }103 };105 public:106 MY_UNKNOWN_IMP107 HRESULT CodeReal(ISequentialInStream **inStreams,108 const UInt64 **inSizes,109 UInt32 numInStreams,110 ISequentialOutStream **outStreams,111 const UInt64 **outSizes,112 UInt32 numOutStreams,113 ICompressProgressInfo *progress);114 STDMETHOD(Code)(ISequentialInStream **inStreams,115 const UInt64 **inSizes,116 UInt32 numInStreams,117 ISequentialOutStream **outStreams,118 const UInt64 **outSizes,119 UInt32 numOutStreams,120 ICompressProgressInfo *progress);121 };123 }}125 #endif