Index: src/libchcore/TTaskInfo.h =================================================================== diff -u -N -r0c5027d5173ab0daeba6aa6b735a2b11d4cd2164 -r293e52b38d46653068006262172018a0f0d0a31c --- src/libchcore/TTaskInfo.h (.../TTaskInfo.h) (revision 0c5027d5173ab0daeba6aa6b735a2b11d4cd2164) +++ src/libchcore/TTaskInfo.h (.../TTaskInfo.h) (revision 293e52b38d46653068006262172018a0f0d0a31c) @@ -25,26 +25,34 @@ #include "TPath.h" #include "TaskID.h" #include "ISerializerContainer.h" -#include "TIntrusiveSerializableItem.h" +#include "TRemovedObjects.h" +#include +#include "TSharedModificationTracker.h" BEGIN_CHCORE_NAMESPACE class TTask; typedef boost::shared_ptr TTaskPtr; -class LIBCHCORE_API TTaskInfoEntry : public TIntrusiveSerializableItem +class LIBCHCORE_API TTaskInfoEntry { public: - enum ETIEntryInfo + enum EModifications { - eMod_TaskPath = TIntrusiveSerializableItem::eMod_Modified, - eMod_Order = TIntrusiveSerializableItem::eMod_Modified << 1, + eMod_None = 0, + eMod_Added, + eMod_TaskPath, + eMod_Order, + + eMod_Last }; public: TTaskInfoEntry(); - TTaskInfoEntry(taskid_t tTaskID, const TSmartPath& pathTask, int iOrder, const TTaskPtr& spTask, int iModification = eMod_None); + TTaskInfoEntry(taskid_t tTaskID, const TSmartPath& pathTask, int iOrder, const TTaskPtr& spTask); + size_t GetObjectID() const; + TSmartPath GetTaskSerializeLocation() const; void SetTaskSerializeLocation(const TSmartPath& pathTask); @@ -54,30 +62,37 @@ int GetOrder() const; void SetOrder(int iOrder); - void Store(const ISerializerContainerPtr& spContainer); - bool Load(const ISerializerRowReaderPtr& spRowReader); + void Store(const ISerializerContainerPtr& spContainer) const; + static void InitLoader(const IColumnsDefinitionPtr& spColumnDefs); + void Load(const ISerializerRowReaderPtr& spRowReader); + void ResetModifications(); + private: - TSmartPath m_pathSerializeLocation; #pragma warning(push) #pragma warning(disable:4251) + size_t m_stObjectID; + typedef std::bitset Bitset; + mutable std::bitset m_setModifications; + TSharedModificationTracker m_pathSerializeLocation; + TSharedModificationTracker m_iOrder; + TTaskPtr m_spTask; #pragma warning(pop) - int m_iOrder; }; class LIBCHCORE_API TTaskInfoContainer { public: TTaskInfoContainer(); - void Add(taskid_t tTaskID, const TSmartPath& strPath, int iOrder, const TTaskPtr& spTask); + void Add(const TSmartPath& strPath, int iOrder, const TTaskPtr& spTask); void RemoveAt(size_t stIndex); TTaskInfoEntry& GetAt(size_t stIndex); const TTaskInfoEntry& GetAt(size_t stIndex) const; - taskid_t GetLastTaskID() const; + TTaskInfoEntry& GetAtOid(size_t stObjectID); bool GetByTaskID(taskid_t tTaskID, TTaskInfoEntry& rInfo) const; @@ -86,25 +101,19 @@ void Clear(); - size_t GetDeletedCount() const; - taskid_t GetDeletedAt(size_t stIndex) const; - // modifications management - void Store(const ISerializerContainerPtr& spContainer); + void Store(const ISerializerContainerPtr& spContainer) const; void Load(const ISerializerContainerPtr& spContainer); void ClearModifications(); - bool HasDeletions() const; - bool HasAdditions() const; - bool HasModifications() const; - private: #pragma warning(push) #pragma warning(disable:4251) std::vector m_vTaskInfos; - std::set m_setRemovedTasks; + mutable TRemovedObjects m_setRemovedTasks; #pragma warning(pop) + size_t m_stLastObjectID; }; END_CHCORE_NAMESPACE