Index: src/libchcore/TModificationTracker.h =================================================================== diff -u -N -r73583f2ca01fa1b2eae49bbc63bce46b9ecff5db -r293e52b38d46653068006262172018a0f0d0a31c --- src/libchcore/TModificationTracker.h (.../TModificationTracker.h) (revision 73583f2ca01fa1b2eae49bbc63bce46b9ecff5db) +++ src/libchcore/TModificationTracker.h (.../TModificationTracker.h) (revision 293e52b38d46653068006262172018a0f0d0a31c) @@ -57,8 +57,11 @@ template TModificationTracker& operator=(const V& rValue) { - m_tValue = rValue; - m_chModified |= eMod_Modified; + if(m_tValue != rValue) + { + m_tValue = rValue; + m_chModified |= eMod_Modified; + } return *this; } @@ -68,25 +71,20 @@ return m_tValue; } - T& Value() + T& Modify() { m_chModified |= eMod_Modified; return m_tValue; } - const T* operator->() const + void ClearModifications() const { - return &m_tValue; - } - - void ClearModifications() - { m_chModified = eMod_None; } bool IsModified() const { - return (m_chModified & eMod_Modified) != 0; + return m_chModified != 0; } bool IsAdded() const @@ -103,7 +101,7 @@ }; T m_tValue; - char m_chModified; + mutable char m_chModified; }; END_CHCORE_NAMESPACE