1// Compress/CopyCoder.h
2
3#ifndef __COMPRESS_COPY_CODER_H
4#define __COMPRESS_COPY_CODER_H
5
6#include "../../Common/MyCom.h"
7
8#include "../ICoder.h"
9
10namespace NCompress {
11
12class CCopyCoder:
13  public ICompressCoder,
14  public ICompressSetInStream,
15  public ISequentialInStream,
16  public ICompressGetInStreamProcessedSize,
17  public CMyUnknownImp
18{
19  Byte *_buf;
20  CMyComPtr<ISequentialInStream> _inStream;
21public:
22  UInt64 TotalSize;
23
24  CCopyCoder(): _buf(0), TotalSize(0) {};
25  ~CCopyCoder();
26
27  MY_UNKNOWN_IMP4(
28      ICompressCoder,
29      ICompressSetInStream,
30      ISequentialInStream,
31      ICompressGetInStreamProcessedSize)
32
33  STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
34      const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
35  STDMETHOD(SetInStream)(ISequentialInStream *inStream);
36  STDMETHOD(ReleaseInStream)();
37  STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
38  STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);
39};
40
41HRESULT CopyStream(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress);
42HRESULT CopyStream_ExactSize(ISequentialInStream *inStream, ISequentialOutStream *outStream, UInt64 size, ICompressProgressInfo *progress);
43
44}
45
46#endif
47