diff --git a/src/lib/iter-chain-search.hpp b/src/lib/iter-chain-search.hpp index a9eeaf7b1..e6a0b6651 100644 --- a/src/lib/iter-chain-search.hpp +++ b/src/lib/iter-chain-search.hpp @@ -61,11 +61,20 @@ namespace lib { template auto - buildSearchFilter(SRC&& dataSource) + buildSearchFilter (SRC&& dataSource) { return treeExplore (forward (dataSource)) .mutableFilter(); } + + template + auto + buildExplorer (SRC&& dataSource, FUN&& expandFunctor) + { + return buildSearchFilter (forward (dataSource)) + .expand (forward (expandFunctor)) + .expandAll(); + } } /** @@ -74,10 +83,12 @@ namespace lib { template class _IterChainSetup { + using Filter = decltype( buildSearchFilter (std::declval()) ); + using StepFunctor = typename iter_explorer::_BoundFunctor::Functor; public: - using Pipeline = decltype( buildSearchFilter (std::declval()) ); + using Pipeline = decltype( buildExplorer (std::declval(), std::declval()) ); }; @@ -102,6 +113,7 @@ namespace lib { // using _Parent = IterStateWrapper; public: + using DebugPipeline = _Base; // IterChainSearch() =default; // IterChainSearch (IterChainSearch&&) =default; // IterChainSearch (IterChainSearch const&) =default; diff --git a/tests/library/iter-chain-search-test.cpp b/tests/library/iter-chain-search-test.cpp index abb3e79bb..2a2e7b708 100644 --- a/tests/library/iter-chain-search-test.cpp +++ b/tests/library/iter-chain-search-test.cpp @@ -110,6 +110,7 @@ namespace test{ ///////////////////////////////////////////////////TODO WIP using Searcher = decltype(search); SHOW_TYPE (Searcher); + SHOW_TYPE (Searcher::DebugPipeline); SHOW_TYPE (Searcher::value_type); SHOW_TYPE (Searcher::pointer); diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index c067e3c85..a83f43e26 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -25107,8 +25107,7 @@ match("a").after("b") scheitert, weil sich die Suche am ersten "a" festbeißt.

- - + @@ -30761,8 +30760,7 @@ ...von der entsprechenden Methode im Transformer

- - +
@@ -30778,8 +30776,7 @@ und im Unit-Test nur für die Kombination Transformer + Explorer abgedeckt....

- - +
@@ -30804,8 +30801,7 @@ - - + @@ -30829,8 +30825,7 @@ hinter der sich eine verkettete Suche mit Backtracking verbirgt

- -
+ @@ -30855,8 +30850,7 @@ sofern längerfristig Itertools durch TreeExplorer abgelöst werden könnte

- - +
@@ -30900,8 +30894,7 @@ Diese wird dann per Value gecaptured, was die gewünschte Kopie bewirkt.

- - +
@@ -30925,8 +30918,7 @@ (und auch dafür ist die Syntax grausam)

- -
+
@@ -30940,8 +30932,7 @@ ...es soll bloß einfach funktionieren!!!!!!!!!!!

- - +
@@ -30972,8 +30963,7 @@ die Itertools komplett durch den TreeExplorer ablösen zu können

- - +
@@ -31046,8 +31036,7 @@ - - + @@ -31145,8 +31134,7 @@ ...so daß es nur noch wenige Zugangs-Punkte zum unterliegenden Iterator gibt

- - + @@ -31165,8 +31153,7 @@ und außerdem haben wir nun ein direktes API für die Laufrichtung

- - +
@@ -31193,8 +31180,7 @@ Invariante: pullMatch()

- - + @@ -31235,8 +31221,207 @@ - - + + + + + + + + + + + + + + +

+ wir müssen hier eine Festlegung treffen +

+ +
+ + + + + +

+ ...weil die Ergebnisse der einzelnen Schritt-Funktoren, +

+

+ jeweils in den Auswertungs-Stack gepackt werden sollen. +

+

+ +

+

+ Daher müssen sie untereinander kompatibel sein. +

+ +
+ +
+ + + + + + +

+ im typischen Fall kopiert man den Basis-Iterator, +

+

+ und manipuliert dann einige Einstellungen auf diesem. +

+

+ +

+

+ Wir könnten diese Kopie-Semantik sogar erzwingen, +

+

+ indem wir als Argument-Typ des Schritt-Funktors eine const& vorgeben +

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

+ ...den ich mache, um den Adapter in jedem Einzelfall zu bekommen +

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

+ ....und fällt dann beim Instantiieren des Template auf die Schnautze +

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

+ sofern eine Initialisierung ausidem Source-Iterator möglich ist +

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

+ und sonst ist das nicht wirklich "kniffelig" +

+ + +
+ + + + + +

+ ...bloß sind die zig-fach geschachtelten Template-Typen, +

+

+ die dann die Intantiierungs-Call-Hierarchie bevölkern, +

+

+ nahezu unlesbar.... +

+

+ +

+

+ +

+

+ AAber ... wenn es erst mal duch den Compiler ist, +

+

+ dann sollte der Optimizer diese gesamten x-fachen Wrapper nahezu restlos entfernen +

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

+ Konsequenz: jede Argument-Funktion wird nochmal gewrappt +

+ + +
+ +
+ + + +