Index: src/libchcore/TSharedModificationTracker.h =================================================================== diff -u -N -ra44714d5c7ec0f50a376f4d0ea919ee5a224f834 -r95a466ca0a4f95851dcacf2b80e2084e0168b7e4 --- src/libchcore/TSharedModificationTracker.h (.../TSharedModificationTracker.h) (revision a44714d5c7ec0f50a376f4d0ea919ee5a224f834) +++ src/libchcore/TSharedModificationTracker.h (.../TSharedModificationTracker.h) (revision 95a466ca0a4f95851dcacf2b80e2084e0168b7e4) @@ -34,70 +34,49 @@ m_tValue(), m_rBitset(rBitset) { - m_rBitset[ChangeBit] = true; + MarkAsModified(); } - TSharedModificationTracker(const TSharedModificationTracker& rSrc) : - m_tValue(rSrc.m_tValue), - m_rBitset(rSrc.m_rBitset) - { - } + TSharedModificationTracker(const TSharedModificationTracker& rSrc) = delete; TSharedModificationTracker(const TSharedModificationTracker& rSrc, Bitset& rBitset) : m_tValue(rSrc.m_tValue), m_rBitset(rBitset) { - m_rBitset[ChangeBit] = rBitset[ChangeBit]; + m_rBitset[ChangeBit] = rSrc.m_rBitset[ChangeBit]; } - template - TSharedModificationTracker(Bitset& rBitset, const V& rValue) : - m_tValue(rValue), + template + TSharedModificationTracker(Bitset& rBitset, const V&... rValues) : + m_tValue(rValues...), m_rBitset(rBitset) { - m_rBitset[ChangeBit] = true; + MarkAsModified(); } - template - TSharedModificationTracker(Bitset& rBitset, const V1& rValue1, const V2& rValue2) : - m_tValue(rValue1, rValue2), - m_rBitset(rBitset) - { - m_rBitset[ChangeBit] = true; - } - TSharedModificationTracker& operator=(const TSharedModificationTracker& rValue) { if(this != &rValue) { m_tValue = rValue.m_tValue; - if(m_tValue != rValue.m_tValue) - m_rBitset[ChangeBit] = true; + m_rBitset[ChangeBit] = rValue.m_rBitset[ChangeBit]; } return *this; } - TSharedModificationTracker& operator=(const T& rValue) + template + TSharedModificationTracker& operator=(const V& rValue) { if(m_tValue != rValue) { m_tValue = rValue; - m_rBitset[ChangeBit] = true; + MarkAsModified(); } return *this; } - template - TSharedModificationTracker& operator=(const V& rValue) - { - m_tValue = rValue; - m_rBitset[ChangeBit] = true; - - return *this; - } - operator const T&() const { return m_tValue; @@ -110,7 +89,7 @@ T& Modify() { - m_rBitset[ChangeBit] = true; + MarkAsModified(); return m_tValue; } @@ -119,6 +98,16 @@ return m_rBitset[ChangeBit]; } + void MarkAsModified() + { + m_rBitset[ChangeBit] = true; + } + + void MarkAsUnmodified() + { + m_rBitset[ChangeBit] = false; + } + private: T m_tValue; Bitset& m_rBitset;