Index: src/libchcore/TOverlappedDataBufferQueue.h =================================================================== diff -u -N -r9312d2ac24e7963495b234adb8b9628076b16023 -re4005a958c9412d890eeff1e8087c8298aa7bcf7 --- src/libchcore/TOverlappedDataBufferQueue.h (.../TOverlappedDataBufferQueue.h) (revision 9312d2ac24e7963495b234adb8b9628076b16023) +++ src/libchcore/TOverlappedDataBufferQueue.h (.../TOverlappedDataBufferQueue.h) (revision e4005a958c9412d890eeff1e8087c8298aa7bcf7) @@ -56,25 +56,35 @@ void DataSourceChanged(); // event access - HANDLE GetEventReadPossibleHandle() { return m_eventReadPossible.Handle(); } - HANDLE GetEventWritePossibleHandle() { return m_eventWritePossible.Handle(); } - HANDLE GetEventWriteFinishedHandle() { return m_eventWriteFinished.Handle(); } + HANDLE GetEventReadPossibleHandle() const { return m_eventReadPossible.Handle(); } + HANDLE GetEventWritePossibleHandle() const { return m_eventWritePossible.Handle(); } + HANDLE GetEventWriteFinishedHandle() const { return m_eventWriteFinished.Handle(); } + HANDLE GetEventAllBuffersAccountedFor() const { return m_eventAllBuffersAccountedFor.Handle(); } + void WaitForMissingBuffers(HANDLE hKillEvent); + private: void CleanupBuffers(); void UpdateReadPossibleEvent(); void UpdateWritePossibleEvent(); void UpdateWriteFinishedEvent(); + void UpdateAllBuffersAccountedFor(); private: std::deque> m_listAllBuffers; size_t m_stBufferSize; std::list m_listEmptyBuffers; - std::set m_setFullBuffers; - std::set m_setFinishedBuffers; + using FullBuffersSet = std::set < TOverlappedDataBuffer*, CompareBufferPositions > ; + FullBuffersSet m_setFullBuffers; + + using FinishedBuffersSet = std::set < TOverlappedDataBuffer*, CompareBufferPositions > ; + FinishedBuffersSet m_setFinishedBuffers; + bool m_bDataSourceFinished; // input file was already read to the end + bool m_bDataWritingFinished; // output file was already written to the end + unsigned long long m_ullNextExpectedWritePosition; // current write file pointer unsigned long long m_ullNextReadBufferOrder; // next order id for read buffers unsigned long long m_ullNextWriteBufferOrder; // next order id to be processed when writing @@ -83,6 +93,7 @@ TEvent m_eventReadPossible; TEvent m_eventWritePossible; TEvent m_eventWriteFinished; + TEvent m_eventAllBuffersAccountedFor; }; END_CHCORE_NAMESPACE