Index: src/libchcore/TSubTaskCopyMove.h =================================================================== diff -u -N -r0b8ae6ab8b538881b651126bf8e6de9c9912a782 -r19925be73ffcadd9f345f10e03e55aadb3f0eeac --- src/libchcore/TSubTaskCopyMove.h (.../TSubTaskCopyMove.h) (revision 0b8ae6ab8b538881b651126bf8e6de9c9912a782) +++ src/libchcore/TSubTaskCopyMove.h (.../TSubTaskCopyMove.h) (revision 19925be73ffcadd9f345f10e03e55aadb3f0eeac) @@ -62,9 +62,28 @@ unsigned long long GetCurrentFileProcessedSize() const; void IncreaseCurrentFileProcessedSize(unsigned long long ullSizeToAdd); + void Store(const ISerializerRowDataPtr& spRowData) const; + static void InitLoader(const IColumnsDefinitionPtr& spColumns); + void Load(const ISerializerRowReaderPtr& spRowReader); + bool WasSerialized() const; + private: - volatile size_t m_stCurrentIndex; - volatile unsigned long long m_ullCurrentFileProcessedSize; // count of bytes processed for current file + enum EModifications + { + eMod_Added, + eMod_CurrentIndex, + eMod_CurrentFileProcessedSize, + + // last item + eMod_Last + }; + + typedef std::bitset<eMod_Last> Bitset; + mutable Bitset m_setModifications; + + TSharedModificationTracker<size_t, Bitset, eMod_CurrentIndex> m_stCurrentIndex; + TSharedModificationTracker<unsigned long long, Bitset, eMod_CurrentFileProcessedSize> m_ullCurrentFileProcessedSize; // count of bytes processed for current file + mutable boost::shared_mutex m_lock; }; }