diff --git a/src/proc/mobject/session/placement-index-query-resolver.hpp b/src/proc/mobject/session/placement-index-query-resolver.hpp index 0061f801e..62a381379 100644 --- a/src/proc/mobject/session/placement-index-query-resolver.hpp +++ b/src/proc/mobject/session/placement-index-query-resolver.hpp @@ -69,8 +69,33 @@ namespace session { : public session::QueryResolver { +////////////////////////////////////////////////////////////////TODO: moved in from PlacementIndex + template + typename session::Query >::iterator + query (PlacementMO& scope) const; + + operator string() const { return "PlacementIndex"; } + + bool canHandleQuery(QID) const; +////////////////////////////////////////////////////////////////TODO: }; + + /** @todo use query-resolver-test as an example..... + * return a result set object derived from Resolution + * For the additional type filtering: build a filter iterator, + * using a type-filtering predicate, based on Placement#isCompatible + */ + template + inline typename session::Query >::iterator + PlacementIndex::query (PlacementMO& scope) const + { + UNIMPLEMENTED ("actually run the containment query"); + } +////////////////////////////////////////////////////////////////TODO: + + + }} // namespace mobject::session #endif diff --git a/src/proc/mobject/session/placement-index.cpp b/src/proc/mobject/session/placement-index.cpp index c1d10f5a3..a02b48725 100644 --- a/src/proc/mobject/session/placement-index.cpp +++ b/src/proc/mobject/session/placement-index.cpp @@ -125,10 +125,13 @@ namespace session { } - vector + PlacementIndex::iterator PlacementIndex::getReferrers (ID) const { UNIMPLEMENTED ("query the Placement relation index and retrieve all other placements bound to this one by a placement-relation"); + // do a query using equal_range of the hashtable (unordered_multimap) + // build a RangeIter from them + // use this to build an auto-fetching IterAdapter } diff --git a/src/proc/mobject/session/placement-index.hpp b/src/proc/mobject/session/placement-index.hpp index 6379f69b8..db199b0c6 100644 --- a/src/proc/mobject/session/placement-index.hpp +++ b/src/proc/mobject/session/placement-index.hpp @@ -38,11 +38,13 @@ //#include "proc/asset/pipe.hpp" #include "lib/util.hpp" #include "lib/factory.hpp" +#include "lib/iter-adapter.hpp" #include "proc/mobject/placement.hpp" #include "proc/mobject/placement-ref.hpp" -#include "proc/mobject/session/query-resolver.hpp" +//#include "proc/mobject/session/query-resolver.hpp" #include +#include #include #include #include @@ -59,7 +61,7 @@ namespace session { using boost::scoped_ptr; using std::vector; - +//using boost::hash; /** */ @@ -71,12 +73,18 @@ namespace session { scoped_ptr pTab_; + + typedef PlacementMO::ID _PlID; + typedef std::tr1::unordered_multimap<_PlID,_PlID>::iterator ScopeIter; + + public: typedef Placement PlacementMO; typedef PlacementRef PRef; typedef PlacementMO::ID const& ID; - typedef session::Goal::QueryID const& QID; +// typedef session::Goal::QueryID const& QID; + typedef lib::RangeIter iterator; PlacementMO& find (ID) const; @@ -89,7 +97,7 @@ namespace session { PlacementMO& getScope (PlacementMO const&) const; PlacementMO& getScope (ID) const; - vector getReferrers (ID) const; ///////////////TODO: interface for low level enumeration + iterator getReferrers (ID) const; /** retrieve the logical root scope */ @@ -99,15 +107,6 @@ namespace session { bool contains (PlacementMO const&) const; bool contains (ID) const; -////////////////////////////////////////////////////////////////TODO: refactor into explicit query resolving wrapper - template - typename session::Query >::iterator - query (PlacementMO& scope) const; - - operator string() const { return "PlacementIndex"; } - - bool canHandleQuery(QID) const; -////////////////////////////////////////////////////////////////TODO: refactor into explicit query resolving wrapper @@ -163,18 +162,6 @@ namespace session { } - /** @todo use query-resolver-test as an example..... - * return a result set object derived from Resolution - * For the additional type filtering: build a filter iterator, - * using a type-filtering predicate, based on Placement#isCompatible - */ - template - inline typename session::Query >::iterator - PlacementIndex::query (PlacementMO& scope) const - { - UNIMPLEMENTED ("actually run the containment query"); - } - inline Placement& PlacementIndex::getScope (PlacementMO const& p) const {