1 // StreamBinder.h
2 
3 #ifndef __STREAM_BINDER_H
4 #define __STREAM_BINDER_H
5 
6 #include "../../Windows/Synchronization.h"
7 
8 #include "../IStream.h"
9 
10 class CStreamBinder
11 {
12   NWindows::NSynchronization::CManualResetEvent _canWrite_Event;
13   NWindows::NSynchronization::CManualResetEvent _canRead_Event;
14   NWindows::NSynchronization::CManualResetEvent _readingWasClosed_Event;
15   bool _waitWrite;
16   UInt32 _bufSize;
17   const void *_buf;
18 public:
19   UInt64 ProcessedSize;
20 
21   WRes CreateEvents();
22   void CreateStreams(ISequentialInStream **inStream, ISequentialOutStream **outStream);
23   void ReInit();
24   HRESULT Read(void *data, UInt32 size, UInt32 *processedSize);
25   HRESULT Write(const void *data, UInt32 size, UInt32 *processedSize);
CloseRead()26   void CloseRead() { _readingWasClosed_Event.Set(); }
CloseWrite()27   void CloseWrite()
28   {
29     // _bufSize must be = 0
30     _canRead_Event.Set();
31   }
32 };
33 
34 #endif
35