WIP about providing scope contents discovery, backed by the index
This commit is contained in:
parent
bfd97bd98e
commit
d658415144
8 changed files with 60 additions and 18 deletions
|
|
@ -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 == */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.....!!!!!
|
||||
|
|
|
|||
|
|
@ -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"));
|
||||
|
|
|
|||
Loading…
Reference in a new issue