Index: third_party/lzma/v4_65/files/CPP/7zip/Common/StreamBinder.cpp |
diff --git a/third_party/lzma/v4_65/files/CPP/7zip/Common/StreamBinder.cpp b/third_party/lzma/v4_65/files/CPP/7zip/Common/StreamBinder.cpp |
deleted file mode 100644 |
index 03f88625899497ac80dce8965766efd995a77f4a..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CPP/7zip/Common/StreamBinder.cpp |
+++ /dev/null |
@@ -1,150 +0,0 @@ |
-// StreamBinder.cpp |
- |
-#include "StdAfx.h" |
- |
-#include "StreamBinder.h" |
-#include "../../Common/Defs.h" |
-#include "../../Common/MyCom.h" |
- |
-using namespace NWindows; |
-using namespace NSynchronization; |
- |
-class CSequentialInStreamForBinder: |
- public ISequentialInStream, |
- public CMyUnknownImp |
-{ |
-public: |
- MY_UNKNOWN_IMP |
- |
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); |
-private: |
- CStreamBinder *m_StreamBinder; |
-public: |
- ~CSequentialInStreamForBinder() { m_StreamBinder->CloseRead(); } |
- void SetBinder(CStreamBinder *streamBinder) { m_StreamBinder = streamBinder; } |
-}; |
- |
-STDMETHODIMP CSequentialInStreamForBinder::Read(void *data, UInt32 size, UInt32 *processedSize) |
- { return m_StreamBinder->Read(data, size, processedSize); } |
- |
-class CSequentialOutStreamForBinder: |
- public ISequentialOutStream, |
- public CMyUnknownImp |
-{ |
-public: |
- MY_UNKNOWN_IMP |
- |
- STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); |
- |
-private: |
- CStreamBinder *m_StreamBinder; |
-public: |
- ~CSequentialOutStreamForBinder() { m_StreamBinder->CloseWrite(); } |
- void SetBinder(CStreamBinder *streamBinder) { m_StreamBinder = streamBinder; } |
-}; |
- |
-STDMETHODIMP CSequentialOutStreamForBinder::Write(const void *data, UInt32 size, UInt32 *processedSize) |
- { return m_StreamBinder->Write(data, size, processedSize); } |
- |
- |
-////////////////////////// |
-// CStreamBinder |
-// (_thereAreBytesToReadEvent && _bufferSize == 0) means that stream is finished. |
- |
-HRes CStreamBinder::CreateEvents() |
-{ |
- RINOK(_allBytesAreWritenEvent.Create(true)); |
- RINOK(_thereAreBytesToReadEvent.Create()); |
- return _readStreamIsClosedEvent.Create(); |
-} |
- |
-void CStreamBinder::ReInit() |
-{ |
- _thereAreBytesToReadEvent.Reset(); |
- _readStreamIsClosedEvent.Reset(); |
- ProcessedSize = 0; |
-} |
- |
- |
- |
-void CStreamBinder::CreateStreams(ISequentialInStream **inStream, |
- ISequentialOutStream **outStream) |
-{ |
- CSequentialInStreamForBinder *inStreamSpec = new |
- CSequentialInStreamForBinder; |
- CMyComPtr<ISequentialInStream> inStreamLoc(inStreamSpec); |
- inStreamSpec->SetBinder(this); |
- *inStream = inStreamLoc.Detach(); |
- |
- CSequentialOutStreamForBinder *outStreamSpec = new |
- CSequentialOutStreamForBinder; |
- CMyComPtr<ISequentialOutStream> outStreamLoc(outStreamSpec); |
- outStreamSpec->SetBinder(this); |
- *outStream = outStreamLoc.Detach(); |
- |
- _buffer = NULL; |
- _bufferSize= 0; |
- ProcessedSize = 0; |
-} |
- |
-HRESULT CStreamBinder::Read(void *data, UInt32 size, UInt32 *processedSize) |
-{ |
- UInt32 sizeToRead = size; |
- if (size > 0) |
- { |
- RINOK(_thereAreBytesToReadEvent.Lock()); |
- sizeToRead = MyMin(_bufferSize, size); |
- if (_bufferSize > 0) |
- { |
- memcpy(data, _buffer, sizeToRead); |
- _buffer = ((const Byte *)_buffer) + sizeToRead; |
- _bufferSize -= sizeToRead; |
- if (_bufferSize == 0) |
- { |
- _thereAreBytesToReadEvent.Reset(); |
- _allBytesAreWritenEvent.Set(); |
- } |
- } |
- } |
- if (processedSize != NULL) |
- *processedSize = sizeToRead; |
- ProcessedSize += sizeToRead; |
- return S_OK; |
-} |
- |
-void CStreamBinder::CloseRead() |
-{ |
- _readStreamIsClosedEvent.Set(); |
-} |
- |
-HRESULT CStreamBinder::Write(const void *data, UInt32 size, UInt32 *processedSize) |
-{ |
- if (size > 0) |
- { |
- _buffer = data; |
- _bufferSize = size; |
- _allBytesAreWritenEvent.Reset(); |
- _thereAreBytesToReadEvent.Set(); |
- |
- HANDLE events[2]; |
- events[0] = _allBytesAreWritenEvent; |
- events[1] = _readStreamIsClosedEvent; |
- DWORD waitResult = ::WaitForMultipleObjects(2, events, FALSE, INFINITE); |
- if (waitResult != WAIT_OBJECT_0 + 0) |
- { |
- // ReadingWasClosed = true; |
- return S_FALSE; |
- } |
- // if(!_allBytesAreWritenEvent.Lock()) |
- // return E_FAIL; |
- } |
- if (processedSize != NULL) |
- *processedSize = size; |
- return S_OK; |
-} |
- |
-void CStreamBinder::CloseWrite() |
-{ |
- // _bufferSize must be = 0 |
- _thereAreBytesToReadEvent.Set(); |
-} |