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#include "../../Windows/FileIO.h"
9
10#include "../IStream.h"
11
12class CInOutTempBuffer
13{
14  NWindows::NFile::NDirectory::CTempFile _tempFile;
15  NWindows::NFile::NIO::COutFile _outFile;
16  Byte *_buf;
17  UInt32 _bufPos;
18  CSysString _tempFileName;
19  bool _tempFileCreated;
20  UInt64 _size;
21  UInt32 _crc;
22
23  bool WriteToFile(const void *data, UInt32 size);
24public:
25  CInOutTempBuffer();
26  ~CInOutTempBuffer();
27  void Create();
28
29  void InitWriting();
30  bool Write(const void *data, UInt32 size);
31
32  HRESULT WriteToStream(ISequentialOutStream *stream);
33  UInt64 GetDataSize() const { return _size; }
34};
35
36class CSequentialOutTempBufferImp:
37  public ISequentialOutStream,
38  public CMyUnknownImp
39{
40  CInOutTempBuffer *_buf;
41public:
42  void Init(CInOutTempBuffer *buffer)  { _buf = buffer; }
43  MY_UNKNOWN_IMP
44
45  STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
46};
47
48#endif
49