1 // InOutTempBuffer.h
2 
3 #ifndef __IN_OUT_TEMP_BUFFER_H
4 #define __IN_OUT_TEMP_BUFFER_H
5 
6 #include "../../Common/MyCom.h"
7 #include "../../Windows/FileDir.h"
8 
9 #include "../IStream.h"
10 
11 class CInOutTempBuffer
12 {
13   NWindows::NFile::NDir::CTempFile _tempFile;
14   NWindows::NFile::NIO::COutFile _outFile;
15   Byte *_buf;
16   UInt32 _bufPos;
17   bool _tempFileCreated;
18   UInt64 _size;
19   UInt32 _crc;
20 
21   bool WriteToFile(const void *data, UInt32 size);
22 public:
23   CInOutTempBuffer();
24   ~CInOutTempBuffer();
25   void Create();
26 
27   void InitWriting();
28   bool Write(const void *data, UInt32 size);
29 
30   HRESULT WriteToStream(ISequentialOutStream *stream);
GetDataSize()31   UInt64 GetDataSize() const { return _size; }
32 };
33 
34 class CSequentialOutTempBufferImp:
35   public ISequentialOutStream,
36   public CMyUnknownImp
37 {
38   CInOutTempBuffer *_buf;
39 public:
Init(CInOutTempBuffer * buffer)40   void Init(CInOutTempBuffer *buffer)  { _buf = buffer; }
41   MY_UNKNOWN_IMP
42 
43   STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
44 };
45 
46 #endif
47