Index: src/libchcore/TOverlappedWriter.cpp =================================================================== diff -u -N -ra1f5b3d99f2f175b102d81379698ea1f08e42cce -rf1d25f23712f5de7459f690ab51b2640d0f81b91 --- src/libchcore/TOverlappedWriter.cpp (.../TOverlappedWriter.cpp) (revision a1f5b3d99f2f175b102d81379698ea1f08e42cce) +++ src/libchcore/TOverlappedWriter.cpp (.../TOverlappedWriter.cpp) (revision f1d25f23712f5de7459f690ab51b2640d0f81b91) @@ -25,19 +25,22 @@ namespace chcore { TOverlappedWriter::TOverlappedWriter(const logger::TLogFileDataPtr& spLogFileData, const TOrderedBufferQueuePtr& spBuffersToWrite, - unsigned long long ullFilePos, const TBufferListPtr& spEmptyBuffers) : + const TOverlappedProcessorRangePtr& spRange, const TBufferListPtr& spEmptyBuffers) : m_spLog(logger::MakeLogger(spLogFileData, L"DataBuffer")), m_spEmptyBuffers(spEmptyBuffers), m_tBuffersToWrite(spBuffersToWrite), - m_tFinishedBuffers(ullFilePos) + m_tFinishedBuffers(spRange != nullptr ? spRange->GetResumePosition() : 0) { if(!spLogFileData) throw TCoreException(eErr_InvalidArgument, L"spLogFileData is NULL", LOCATION); if(!spBuffersToWrite) throw TCoreException(eErr_InvalidArgument, L"spBuffersToWrite is NULL", LOCATION); if(!spEmptyBuffers) throw TCoreException(eErr_InvalidArgument, L"spEmptyBuffers is NULL", LOCATION); + if(!spRange) + throw TCoreException(eErr_InvalidArgument, L"spRange is NULL", LOCATION); + m_dataRangeChanged = spRange->GetNotifier().connect(boost::bind(&TOverlappedWriter::UpdateProcessingRange, this, _1)); } TOverlappedWriter::~TOverlappedWriter() @@ -152,6 +155,11 @@ return m_tFinishedBuffers.GetHasBuffersEvent(); } + void TOverlappedWriter::UpdateProcessingRange(unsigned long long ullNewPosition) + { + m_tFinishedBuffers.UpdateProcessingRange(ullNewPosition); + } + void TOverlappedWriter::AddFinishedBuffer(TOverlappedDataBuffer* pBuffer) { if (!pBuffer)