From a459468e3edbd655cdbf7c57e768957134b80df1 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 23 Dec 2017 00:24:56 +0100 Subject: [PATCH] Navigator: draft how building of the iterator might work NOTE it just type checks right now, but since meta programming is functional programming, this means with >90% probability that it might actually work this way.... --- src/gui/interact/ui-coord-resolver.cpp | 1 + src/gui/interact/ui-coord-resolver.hpp | 13 +++++++- wiki/thinkPad.ichthyo.mm | 42 ++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/gui/interact/ui-coord-resolver.cpp b/src/gui/interact/ui-coord-resolver.cpp index de3292930..366efcfb2 100644 --- a/src/gui/interact/ui-coord-resolver.cpp +++ b/src/gui/interact/ui-coord-resolver.cpp @@ -30,6 +30,7 @@ #include "gui/interact/ui-coord-resolver.hpp" //#include "gui/ctrl/global-ctx.hpp" +#include "lib/iter-stack.hpp" //#include "lib/symbol.hpp" //#include "lib/util.hpp" diff --git a/src/gui/interact/ui-coord-resolver.hpp b/src/gui/interact/ui-coord-resolver.hpp index a09fafaa0..751f24f33 100644 --- a/src/gui/interact/ui-coord-resolver.hpp +++ b/src/gui/interact/ui-coord-resolver.hpp @@ -48,8 +48,8 @@ #include "lib/error.hpp" #include "lib/symbol.hpp" #include "gui/interact/ui-coord.hpp" +#include "lib/iter-tree-explorer.hpp" #include "lib/iter-source.hpp" -#include "lib/iter-stack.hpp" #include "lib/util.hpp" //#include @@ -99,6 +99,16 @@ namespace interact { * type #iterator, which exposes an appropriately wired iterator::expandChildren() */ virtual TreeStructureNavigator* expandChildren() const =0; + + + static auto + buildIterator (TreeStructureNavigator* source) + { + return lib::treeExplore( + lib::IterSource::build (source)) + .expand([](Literal id){ return lib::IterSource::build ( + ((TreeStructureNavigator*)nullptr)->expandChildren() ); }); + } }; @@ -117,6 +127,7 @@ namespace interact { public: virtual ~LocationQuery(); ///< this is an interface + using iteratorZ = decltype (TreeStructureNavigator::buildIterator(std::declval())); using ChildIter = lib::IterSource::iterator; diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 206cc51ec..7b084d35b 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -8014,6 +8014,48 @@ + + + + + + + + + + + +

+ der Expander sitzt nun doch dahinter, in der Implementierung +

+ +
+
+ + + +
+
+
+ + + + + + + + + + + + +

+ das Ergebnis ist der konkrete Iterator-Typ +

+ + +
+