Index: src/libchcore/TSharedModificationTracker.h =================================================================== diff -u -N -r73583f2ca01fa1b2eae49bbc63bce46b9ecff5db -r293e52b38d46653068006262172018a0f0d0a31c --- src/libchcore/TSharedModificationTracker.h (.../TSharedModificationTracker.h) (revision 73583f2ca01fa1b2eae49bbc63bce46b9ecff5db) +++ src/libchcore/TSharedModificationTracker.h (.../TSharedModificationTracker.h) (revision 293e52b38d46653068006262172018a0f0d0a31c) @@ -23,35 +23,35 @@ BEGIN_CHCORE_NAMESPACE -template +template class TSharedModificationTracker { public: - TSharedModificationTracker(bool& rbSharedFlag) : + TSharedModificationTracker(Bitset& rBitset) : m_tValue(), - m_rbModified(rbSharedFlag) + m_rBitset(rBitset) { } - TSharedModificationTracker(const TSharedModificationTracker& rSrc) : + TSharedModificationTracker(const TSharedModificationTracker& rSrc) : m_tValue(rSrc.m_tValue), - m_rbModified(rSrc.m_rbModified) + m_rBitset(rSrc.m_rBitset) { } template - TSharedModificationTracker(const V& rValue, bool& rbSharedFlag) : + TSharedModificationTracker(Bitset& rBitset, const V& rValue) : m_tValue(rValue), - m_rbModified(rbSharedFlag) + m_rBitset(rBitset) { } - TSharedModificationTracker& operator=(const TSharedModificationTracker& rValue) + TSharedModificationTracker& operator=(const TSharedModificationTracker& rValue) { if(this != &rValue) { - m_rbModified = rValue.m_rbModified; m_tValue = rValue.m_tValue; + m_rBitset = rValue.m_rBitset; } return *this; @@ -60,8 +60,11 @@ template TSharedModificationTracker& operator=(const V& rValue) { - m_tValue = rValue; - m_rbModified = true; + if(m_tValue != rValue) + { + m_tValue = rValue; + m_rBitset[ChangeBit] = true; + } return *this; } @@ -71,25 +74,25 @@ return m_tValue; } - T& Value() + const T& Get() const { - m_rbModified = true; return m_tValue; } - const T* operator->() const + T& Modify() { - return &m_tValue; + m_rBitset[ChangeBit] = true; + return m_tValue; } bool IsModified() const { - return m_rbModified; + return m_rBitset[ChangeBit]; } private: T m_tValue; - bool& m_rbModified; + Bitset& m_rBitset; }; END_CHCORE_NAMESPACE