text: ﻿// InOutTempBuffer.h
  
  #ifndef __IN_OUT_TEMP_BUFFER_H
  #define __IN_OUT_TEMP_BUFFER_H
  
  #ifdef _WIN32
  // #define USE_InOutTempBuffer_FILE
  #endif
  
  #ifdef USE_InOutTempBuffer_FILE
  #include "../../Windows/FileDir.h"
  #else
  #include "StreamObjects.h"
  #endif
  
  #include "../IStream.h"
  
  class CInOutTempBuffer
  {
    #ifdef USE_InOutTempBuffer_FILE
    
    NWindows::NFile::NDir::CTempFile _tempFile;
    NWindows::NFile::NIO::COutFile _outFile;
    bool _tempFileCreated;
    Byte *_buf;
    size_t _bufPos;
    UInt64 _size;
    UInt32 _crc;
  
    #else
    
    CByteDynBuffer _dynBuffer;
    size_t _size;
    
    #endif
  
    CLASS_NO_COPY(CInOutTempBuffer);
  public:
    CInOutTempBuffer();
    void Create();
  
    #ifdef USE_InOutTempBuffer_FILE
    ~CInOutTempBuffer();
    #endif
  
    void InitWriting();
    HRESULT Write_HRESULT(const void *data, UInt32 size);
    HRESULT WriteToStream(ISequentialOutStream *stream);
    UInt64 GetDataSize() const { return _size; }
  };
  
  /*
  class CSequentialOutTempBufferImp:
    public ISequentialOutStream,
    public CMyUnknownImp
  {
    CInOutTempBuffer *_buf;
  public:
    void Init(CInOutTempBuffer *buffer)  { _buf = buffer; }
    MY_UNKNOWN_IMP
  
    STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
  };
  */
  
  #endif
  