// StreamBinder.h | |
#ifndef __STREAM_BINDER_H | |
#define __STREAM_BINDER_H | |
#include "../../Windows/Synchronization.h" | |
#include "../IStream.h" | |
class CStreamBinder | |
{ | |
NWindows::NSynchronization::CManualResetEvent _canWrite_Event; | |
NWindows::NSynchronization::CManualResetEvent _canRead_Event; | |
NWindows::NSynchronization::CManualResetEvent _readingWasClosed_Event; | |
bool _waitWrite; | |
UInt32 _bufSize; | |
const void *_buf; | |
public: | |
UInt64 ProcessedSize; | |
WRes CreateEvents(); | |
void CreateStreams(ISequentialInStream **inStream, ISequentialOutStream **outStream); | |
void ReInit(); | |
HRESULT Read(void *data, UInt32 size, UInt32 *processedSize); | |
HRESULT Write(const void *data, UInt32 size, UInt32 *processedSize); | |
void CloseRead() { _readingWasClosed_Event.Set(); } | |
void CloseWrite() | |
{ | |
// _bufSize must be = 0 | |
_canRead_Event.Set(); | |
} | |
}; | |
#endif |