56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
// Util/InOutTempBuffer.h
|
|
|
|
#ifndef __IN_OUT_TEMP_BUFFER_H
|
|
#define __IN_OUT_TEMP_BUFFER_H
|
|
|
|
#include "../../Windows/FileIO.h"
|
|
#include "../../Windows/FileDir.h"
|
|
#include "../../Common/MyCom.h"
|
|
|
|
#include "../IStream.h"
|
|
|
|
class CInOutTempBuffer
|
|
{
|
|
NWindows::NFile::NDirectory::CTempFile _tempFile;
|
|
NWindows::NFile::NIO::COutFile _outFile;
|
|
NWindows::NFile::NIO::CInFile _inFile;
|
|
Byte *_buffer;
|
|
UInt32 _bufferPosition;
|
|
UInt32 _currentPositionInBuffer;
|
|
CSysString _tmpFileName;
|
|
bool _tmpFileCreated;
|
|
|
|
UInt64 _fileSize;
|
|
|
|
bool WriteToFile(const void *data, UInt32 size);
|
|
public:
|
|
CInOutTempBuffer();
|
|
~CInOutTempBuffer();
|
|
void Create();
|
|
|
|
void InitWriting();
|
|
bool Write(const void *data, UInt32 size);
|
|
UInt64 GetDataSize() const { return _fileSize; }
|
|
bool FlushWrite();
|
|
bool InitReading();
|
|
HRESULT WriteToStream(ISequentialOutStream *stream);
|
|
};
|
|
|
|
class CSequentialOutTempBufferImp:
|
|
public ISequentialOutStream,
|
|
public CMyUnknownImp
|
|
{
|
|
CInOutTempBuffer *_buffer;
|
|
public:
|
|
// CSequentialOutStreamImp(): _size(0) {}
|
|
// UInt32 _size;
|
|
void Init(CInOutTempBuffer *buffer) { _buffer = buffer; }
|
|
// UInt32 GetSize() const { return _size; }
|
|
|
|
MY_UNKNOWN_IMP
|
|
|
|
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
|
};
|
|
|
|
#endif
|