Index: src/libchcore/TOverlappedReaderWriter.h =================================================================== diff -u -N -rd23ed007b8142c6faf6d8cad4a421ac243ef0146 -r1506d51ff1c0a5d156dab398051efc0c87473e81 --- src/libchcore/TOverlappedReaderWriter.h (.../TOverlappedReaderWriter.h) (revision d23ed007b8142c6faf6d8cad4a421ac243ef0146) +++ src/libchcore/TOverlappedReaderWriter.h (.../TOverlappedReaderWriter.h) (revision 1506d51ff1c0a5d156dab398051efc0c87473e81) @@ -22,31 +22,29 @@ #include "TEvent.h" #include "../liblogger/TLogFileData.h" #include "../liblogger/TLogger.h" -#include "TOverlappedDataBufferQueue.h" +#include "TOverlappedMemoryPool.h" +#include "TOrderedBufferQueue.h" +#include "IFilesystemFile.h" namespace chcore { - class TOverlappedDataBuffer; - - struct CompareBufferPositions - { - bool operator()(const TOverlappedDataBuffer* rBufferA, const TOverlappedDataBuffer* rBufferB); - }; - class TOverlappedReaderWriter { public: - explicit TOverlappedReaderWriter(const logger::TLogFileDataPtr& spLogFileData, const TOverlappedDataBufferQueuePtr& spBuffers); + explicit TOverlappedReaderWriter(const logger::TLogFileDataPtr& spLogFileData, const TOverlappedMemoryPoolPtr& spBuffers, + file_size_t ullFilePos, DWORD dwChunkSize); TOverlappedReaderWriter(const TOverlappedReaderWriter&) = delete; ~TOverlappedReaderWriter(); TOverlappedReaderWriter& operator=(const TOverlappedReaderWriter&) = delete; // buffer management + void AddFailedReadBuffer(TOverlappedDataBuffer* pBuffer); void AddEmptyBuffer(TOverlappedDataBuffer* pBuffer); TOverlappedDataBuffer* GetEmptyBuffer(); void AddFullBuffer(TOverlappedDataBuffer* pBuffer); + void AddFailedFullBuffer(TOverlappedDataBuffer* pBuffer); TOverlappedDataBuffer* GetFullBuffer(); void AddFinishedBuffer(TOverlappedDataBuffer* pBuffer); @@ -61,7 +59,7 @@ bool IsDataWritingFinished() const { return m_bDataWritingFinished; } // event access - HANDLE GetEventReadPossibleHandle() const { return m_spBuffers->GetEventHasBuffers(); } + 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(); } @@ -70,28 +68,30 @@ private: void CleanupBuffers(); + void UpdateReadPossibleEvent(); void UpdateWritePossibleEvent(); void UpdateWriteFinishedEvent(); void UpdateAllBuffersAccountedFor(); private: logger::TLoggerPtr m_spLog; - TOverlappedDataBufferQueuePtr m_spBuffers; + TOverlappedMemoryPoolPtr m_spMemoryPool; - using FullBuffersSet = std::set < TOverlappedDataBuffer*, CompareBufferPositions >; - FullBuffersSet m_setFullBuffers; + TOrderedBufferQueue m_setEmptyBuffers; // initialized empty buffers + TOrderedBufferQueue m_setFullBuffers; + TOrderedBufferQueue m_setFinishedBuffers; - using FinishedBuffersSet = std::set < TOverlappedDataBuffer*, CompareBufferPositions >; - FinishedBuffersSet m_setFinishedBuffers; + bool m_bDataSourceFinished = false; // input file was already read to the end + bool m_bDataWritingFinished = false; // output file was already written to the end - bool m_bDataSourceFinished; // input file was already read to the end - bool m_bDataWritingFinished; // output file was already written to the end + DWORD m_dwDataChunkSize = 0; - unsigned long long m_ullNextReadBufferOrder; // next order id for read buffers - unsigned long long m_ullNextWriteBufferOrder; // next order id to be processed when writing - unsigned long long m_ullNextFinishedBufferOrder; // next order id to be processed when finishing writing + unsigned long long m_ullNextReadBufferOrder = 0; // next order id for read buffers + unsigned long long m_ullNextWriteBufferOrder = 0; // next order id to be processed when writing + unsigned long long m_ullNextFinishedBufferOrder = 0; // next order id to be processed when finishing writing + TEvent m_eventReadPossible; TEvent m_eventWritePossible; TEvent m_eventWriteFinished; TEvent m_eventAllBuffersAccountedFor;