Source code

Revision control

Copy as Markdown

Other Tools

// StreamBinder.h↩
#ifndef __STREAM_BINDER_H↩
#define __STREAM_BINDER_H↩
#include "../../Windows/Synchronization.h"
#include "../IStream.h"
/*↩
We don't use probably UNSAFE version:↩
reader thread:↩
_canWrite_Event.Set();↩
_readingWasClosed = true↩
_canWrite_Event.Set();↩
writer thread:↩
_canWrite_Event.Wait()↩
if (_readingWasClosed)↩
Can second call of _canWrite_Event.Set() be executed without memory barrier, if event is already set?↩
*/
class CStreamBinder↩
{↩
NWindows::NSynchronization::CAutoResetEvent _canWrite_Event;↩
NWindows::NSynchronization::CManualResetEvent _canRead_Event;↩
NWindows::NSynchronization::CManualResetEvent _readingWasClosed_Event;↩
// bool _readingWasClosed;↩
bool _readingWasClosed2;↩
// bool WritingWasCut;↩
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();↩
// _readingWasClosed = true;↩
// _canWrite_Event.Set();↩
}↩
void CloseWrite()↩
{↩
_buf = NULL;↩
_bufSize = 0;↩
_canRead_Event.Set();↩
}↩
};↩
#endif