WIP about providing scope contents discovery, backed by the index

This commit is contained in:
Fischlurch 2009-11-12 02:15:02 +01:00
parent bfd97bd98e
commit d658415144
8 changed files with 60 additions and 18 deletions

View file

@ -89,7 +89,7 @@ namespace session {
PlacementMO& getScope (PlacementMO const&) const;
PlacementMO& getScope (ID) const;
vector<PRef> getReferrers (ID) const;
vector<PRef> getReferrers (ID) const; ///////////////TODO: interface for low level enumeration
/** retrieve the logical root scope */
@ -105,10 +105,10 @@ namespace session {
query (PlacementMO& scope) const;
operator string() const { return "PlacementIndex"; }
////////////////////////////////////////////////////////////////TODO: refactor into explicit query resolving wrapper
bool canHandleQuery(QID) const;
////////////////////////////////////////////////////////////////TODO: refactor into explicit query resolving wrapper
/* == mutating operations == */

View file

@ -103,7 +103,7 @@ namespace session {
{
TODO ("ensure proper initialisation");
if (!canHandleQuery (query.getQID()))
if (!canHandle (query))
throw lumiera::error::Invalid ("unable to resolve this kind of query"); ////TICKET #197
return dispatcher_->handle(query);

View file

@ -259,6 +259,8 @@ namespace session {
*/
PReso issue (Goal const& query) const;
bool canHandle (Goal const&) const;
protected: /* ===== API for concrete query resolvers ===== */
@ -295,5 +297,12 @@ namespace session {
}
inline bool
QueryResolver::canHandle(Goal const& query)
{
return canHandleQuery (query.getQID());
}
}} // namespace mobject::session
#endif

View file

@ -138,12 +138,18 @@ namespace session {
: IMPL
{
QueryResolver&
getResolver()
getScopeQueryResolver()
{
UNIMPLEMENTED ("how actually to manage the PlacementIndexQueryResolver wrapper instance");
// return IMPL::magic_;
}
PlacementMO&
getScopeRoot()
{
return IMPL::getPlacementIndex()->getRoot();
}
};

View file

@ -46,6 +46,7 @@
#ifndef MOBJECT_SESSION_SESSION_SERVICE_EXPLORE_SCOPE_H
#define MOBJECT_SESSION_SESSION_SERVICE_EXPLORE_SCOPE_H
#include "proc/mobject/placement.hpp"
#include "proc/mobject/session/query-resolver.hpp"
//#include "lib/meta/generator.hpp"
@ -62,7 +63,9 @@ namespace session {
struct SessionServiceExploreScope
{
static QueryResolver& getResolver();
static QueryResolver const& getResolver();
static PlacementMO& getScopeRoot();
};

View file

@ -67,9 +67,23 @@ namespace session {
{
return SessionImplAPI::current->reset_PlacementIndex (alternativeIndex);
}
/** */
QueryResolver const&
SessionServiceExploreScope::getResolver()
{
return SessionImplAPI::current->getScopeQueryResolver();
}
/** */
PlacementMO&
SessionServiceExploreScope::getScopeRoot()
{
return SessionImplAPI::current->getScopeRoot();
}
}} // namespace mobject::session

View file

@ -24,6 +24,7 @@
#include "lib/test/run.hpp"
#include "proc/mobject/session/query-resolver.hpp"
#include "proc/mobject/session/scope-query.hpp"
#include "proc/mobject/session/session-service-explore-scope.hpp"
#include "proc/mobject/session/placement-index-query-resolver.hpp"
#include "proc/mobject/session/test-scopes.hpp"
#include "lib/util.hpp"
@ -59,19 +60,26 @@ namespace test {
virtual void
run (Arg)
{
checkQueryResolverWrapper();
checkQueryResolver();
checkQueryOperations();
}
void
checkQueryResolverWrapper()
checkQueryResolver()
{
PPIdx index = build_testScopes();
QueryResolver const& resolver1 (*index);
QueryResolver const& resolver2 (*index);
QueryResolver const& resolver1 (SessionServiceExploreScope::getResolver());
QueryResolver const& resolver2 (SessionServiceExploreScope::getResolver());
ASSERT (isSameObject (resolver1, resolver2));
index = build_testScopes();
PlacementMO& root1 = index->getRoot();
PlacementMO& root2 = SessionServiceExploreScope::getScopeRoot();
ASSERT (isSameObject (root1, root2));
PlacementMO& elm1 = *ContentsQuery<TestSubMO21>(resolver1,root1);
// PlacementMO& elm2 = index->getReferrers(root1); //////////////TODO: interface for low level enumeration
ASSERT (isSameObject (elm1, elm2));
}
void
@ -80,11 +88,12 @@ namespace test {
#if false //////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #384 !!!!!!!!!
// Prepare an (test)Index (dummy "session")
PPIdx index = build_testScopes();
PlacementMO& root = index->getRoot();
PlacementIndexQueryResolver resolver(index);
discover (ContentsQuery<MObject> (resolver));
discover (ContentsQuery<MObject> (resolver,root));
PlacementMO& elm = *ContentsQuery<TestSubMO21>(resolver);
PlacementMO& elm = *ContentsQuery<TestSubMO1>(resolver,root);
discover (PathQuery(resolver,elm));
#endif ////////////////////////////////////////////////////////////////////////////////////////TODO lots of things unimplemented.....!!!!!

View file

@ -22,7 +22,7 @@
#include "lib/test/run.hpp"
#include "proc/mobject/session/query-resolver.hpp"
#include "proc/mobject/session/session-service-explore-scope.hpp"
#include "proc/mobject/session/scope-query.hpp"
#include "proc/mobject/session/test-scopes.hpp"
//#include "lib/util.hpp"
@ -62,9 +62,10 @@ namespace test {
run (Arg)
{
// Prepare an (test)Index (dummy "session")
PPIdx index = build_testScopes();
PlacementMO& scope (index->getRoot());
QueryResolver const& resolver (*index);
build_testScopes();
QueryResolver const& resolver = SessionServiceExploreScope::getResolver();
PlacementMO const& scope = SessionServiceExploreScope::getScopeRoot();
discover (ScopeQuery<MObject> (resolver,scope, "contents"));
discover (ScopeQuery<DummyMO> (resolver,scope, "contents"));