InOutTempBuffer.h 1.2 KB

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