From b7987cf3ce1d5e9486911e0f9fa4f6a9daae3e84 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 21 Nov 2009 04:48:29 +0100 Subject: [PATCH] define iteration on ScopePath as reverse iteration on the contained Scopes --- src/lib/iter-adapter.hpp | 6 ++--- src/proc/mobject/session/scope-path.hpp | 22 +++++++++++++++++++ .../proc/mobject/scope-path-test.cpp | 14 ++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/lib/iter-adapter.hpp b/src/lib/iter-adapter.hpp index cdec86476..8e085811a 100644 --- a/src/lib/iter-adapter.hpp +++ b/src/lib/iter-adapter.hpp @@ -309,8 +309,8 @@ namespace lib { { } RangeIter () - : p_(0) - , e_(0) + : p_() + , e_() { } @@ -358,7 +358,7 @@ namespace lib { bool isValid () const { - return (p_!= IT(0)) && (p_ != e_); + return (p_!= IT()) && (p_ != e_); } bool diff --git a/src/proc/mobject/session/scope-path.hpp b/src/proc/mobject/session/scope-path.hpp index 054cdfe46..b99a4d85a 100644 --- a/src/proc/mobject/session/scope-path.hpp +++ b/src/proc/mobject/session/scope-path.hpp @@ -27,6 +27,7 @@ //#include "proc/mobject/mobject.hpp" //#include "proc/mobject/placement-ref.hpp" #include "proc/mobject/session/scope.hpp" +#include "lib/iter-adapter.hpp" #include //#include @@ -46,9 +47,17 @@ namespace session { { vector path_; + typedef vector _VType; + typedef _VType::const_reverse_iterator _VIter; + typedef lib::RangeIter<_VIter> _IterType; + public: ScopePath(); + /// Iteration is always ascending from leaf to root + typedef _IterType iterator; + iterator begin() const; + iterator end() const; Scope getLeaf() const; @@ -58,5 +67,18 @@ namespace session { ///////////////////////////TODO currently just fleshing the API + inline ScopePath::iterator + ScopePath::begin() const + { + return iterator (path_.rbegin(), path_.rend()); + } + + inline ScopePath::iterator + ScopePath::end() const + { + return iterator(); + } + + }} // namespace mobject::session #endif diff --git a/tests/components/proc/mobject/scope-path-test.cpp b/tests/components/proc/mobject/scope-path-test.cpp index 4663ae388..c1946c087 100644 --- a/tests/components/proc/mobject/scope-path-test.cpp +++ b/tests/components/proc/mobject/scope-path-test.cpp @@ -95,6 +95,20 @@ namespace test { } + void + checkIteration (ScopePath path, PMO& refPlacement) + { + Scope refScope(refPlacement); + ScopePath::iterator ii = path.begin(); + ASSERT (ii); + while (++ii) + { + ASSERT (*ii == refScope.getParent()); + refScope = *ii; + } + } + + void checkRelations (ScopePath path1, PMO& refPlacement) {