diff --git a/src/proc/mobject/mobject-ref.hpp b/src/proc/mobject/mobject-ref.hpp index 0f62d57d6..0dd45ef6f 100644 --- a/src/proc/mobject/mobject-ref.hpp +++ b/src/proc/mobject/mobject-ref.hpp @@ -142,30 +142,56 @@ namespace mobject { template bool - operator== (MORef const& oRef) + operator== (MORef const& oRef) const { - return pRef_ == oRef.pRef_; + return oRef == this->pRef_; } template bool - operator== (PlacementRef const& pRef) + operator!= (MORef const& oRef) const { - return pRef_ == pRef; + return oRef != this->pRef_; } template - bool - operator== (typename Placement::ID const& pID) + friend bool + operator== (MORef const& oRef, PlacementRef const& pRef) { - return pRef_ == pID; + return oRef.pRef_ == pRef; } - template - bool - operator!= (XX const& xx) + template + friend bool + operator!= (MORef const& oRef, PlacementRef const& pRef) { - return !((*this) == xx); + return oRef.pRef_ != pRef; + } + + template + friend bool + operator== (PlacementRef const& pRef, MORef const& oRef) + { + return pRef == oRef.pRef_; + } + + template + friend bool + operator!= (PlacementRef const& pRef, MORef const& oRef) + { + return pRef != oRef.pRef_; + } + + bool + operator== (PlacementMO::ID const& pID) const + { + return PlacementMO::ID (pRef_) == pID; + } + + bool + operator!= (PlacementMO::ID const& pID) const + { + return PlacementMO::ID (pRef_) != pID; } }; diff --git a/tests/components/proc/mobject/mobject-ref-test.cpp b/tests/components/proc/mobject/mobject-ref-test.cpp index 9d01a47d5..1f0587a80 100644 --- a/tests/components/proc/mobject/mobject-ref-test.cpp +++ b/tests/components/proc/mobject/mobject-ref-test.cpp @@ -127,6 +127,7 @@ namespace test { checkBuildMObjectRef (ref1, &pClip1); checkBuildMObjectRef (ref2, &pClip2); + checkComparison(rP1,rP2); checkLifecycle (rP1,rP2); checkTypeHandling (luid); // -----Tests------------------ @@ -188,6 +189,78 @@ namespace test { ASSERT (4 == rMO.use_count()); } + + void + checkComparison (PMO& p1, PMO& p2) + { + PlacementRef pRef1 (p1); + PlacementRef pRef2 (p2); + + MORef rM; + MORef rC; + +#if false //////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET 384 !!!!!!!!! + rM.activate (p1); + rC.activate (p2); +#endif ////////////////////////////////////////////////////////////////////////////////////////TODO lots of things unimplemented.....!!!!! + ASSERT (rM && rC); + ASSERT (!(rM == rC) && !(rC == rM)); + ASSERT ( (rM != rC) && (rC != rM)); + + // mixed comparisons + ASSERT ( (rM == pRef1) && (pRef1 == rM)); + ASSERT ( (rC == pRef2) && (pRef2 == rC)); + ASSERT (!(rM != pRef1) && !(pRef1 != rM)); + ASSERT (!(rC != pRef2) && !(pRef2 != rC)); + ASSERT ( (rM != pRef2) && (pRef2 != rM)); + ASSERT ( (rC != pRef1) && (pRef1 != rC)); + ASSERT (!(rM == pRef2) && !(pRef2 == rM)); + ASSERT (!(rC == pRef1) && !(pRef1 == rC)); + + ASSERT ( (rM == p1.getID()) ); + ASSERT ( (rC == p2.getID()) ); + ASSERT (!(rM != p1.getID()) ); + ASSERT (!(rC != p2.getID()) ); + ASSERT ( (rM != p2.getID()) ); + ASSERT ( (rC != p1.getID()) ); + ASSERT (!(rM == p2.getID()) ); + ASSERT (!(rC == p1.getID()) ); + + +#if false //////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET 384 !!!!!!!!! + rC.activate (p1); +#endif ////////////////////////////////////////////////////////////////////////////////////////TODO lots of things unimplemented.....!!!!! + ASSERT ( (rM == rC) && (rC == rM)); + ASSERT (!(rM != rC) && !(rC != rM)); + + ASSERT ( (rC == pRef1) && (pRef1 == rC)); + ASSERT (!(rC != pRef1) && !(pRef1 != rC)); + ASSERT ( (rC != pRef2) && (pRef2 != rC)); + ASSERT (!(rC == pRef2) && !(pRef2 == rC)); + + ASSERT ( (rC == p1.getID()) ); + ASSERT (!(rC != p1.getID()) ); + ASSERT ( (rC != p2.getID()) ); + ASSERT (!(rC == p2.getID()) ); + + + rM.close(); + ASSERT (!rM); + ASSERT (!(rM == rC) && !(rC == rM)); + ASSERT ( (rM != rC) && (rC != rM)); + + ASSERT (!(rM == pRef1) && !(pRef1 == rM)); + ASSERT ( (rM != pRef1) && (pRef1 != rM)); + ASSERT (!(rM != pRef2) && !(pRef2 != rM)); + ASSERT ( (rM == pRef2) && (pRef2 == rM)); + + ASSERT (!(rM == p1.getID()) ); + ASSERT ( (rM != p1.getID()) ); + ASSERT (!(rM != p2.getID()) ); + ASSERT ( (rM == p2.getID()) ); + } + + void checkLifecylce (PMObj const& p1, PMObj const& p2) {