TreeExplorer: simple implementation based on eager pulling and an Invariant
lazy pulling would require us to store an additional bool (the way the FilterIterator from itertools does)
This commit is contained in:
parent
2eacde7f2c
commit
e9e7004a2e
2 changed files with 30 additions and 14 deletions
|
|
@ -663,7 +663,7 @@ namespace lib {
|
|||
|
||||
using FilterPredicate = typename _Traits::Functor;
|
||||
|
||||
FilterPredicate trafo_;
|
||||
FilterPredicate predicate_;
|
||||
|
||||
public:
|
||||
|
||||
|
|
@ -672,15 +672,18 @@ namespace lib {
|
|||
|
||||
Filter (SRC&& dataSrc, FUN&& filterFun)
|
||||
: SRC{move (dataSrc)}
|
||||
, trafo_{forward<FUN> (filterFun)}
|
||||
{ }
|
||||
, predicate_{forward<FUN> (filterFun)}
|
||||
{
|
||||
pullFilter(); // initially pull to establish the invariant
|
||||
}
|
||||
|
||||
|
||||
/** refresh state when other layers manipulate the source sequence */
|
||||
/** refresh state when other layers manipulate the source sequence.
|
||||
* @note possibly pulls to re-establish the invariant */
|
||||
void
|
||||
expandChildren()
|
||||
{
|
||||
//////////////////////TODO trigger re-evaluation here...
|
||||
pullFilter();
|
||||
SRC::expandChildren();
|
||||
}
|
||||
|
||||
|
|
@ -689,19 +692,20 @@ namespace lib {
|
|||
bool
|
||||
checkPoint() const
|
||||
{
|
||||
return false; //////////////TODO filter and pull here...
|
||||
return bool(srcIter());
|
||||
}
|
||||
|
||||
typename SRC::reference
|
||||
yield() const
|
||||
{
|
||||
return *(*this);
|
||||
return *srcIter();
|
||||
}
|
||||
|
||||
void
|
||||
iterNext()
|
||||
{
|
||||
++ srcIter();
|
||||
pullFilter();
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -711,11 +715,14 @@ namespace lib {
|
|||
return unConst(*this);
|
||||
}
|
||||
|
||||
bool
|
||||
/** @note establishes the invariant:
|
||||
* whatever the source yields as current element,
|
||||
* has already been approved by our predicate */
|
||||
void
|
||||
pullFilter ()
|
||||
{
|
||||
////////////////////////TODO while-not-filter iter
|
||||
return false; //////////TODO return true if any result??
|
||||
while (srcIter() and not predicate_(srcIter()))
|
||||
++srcIter();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5706,12 +5706,21 @@
|
|||
<node CREATED="1511837345226" ID="ID_991593174" MODIFIED="1511837351797" TEXT="bestehende Funktor-Argument-Traits"/>
|
||||
</node>
|
||||
<node CREATED="1512523892775" ID="ID_673112014" MODIFIED="1512523896362" TEXT="Knackpunkte">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1512523897422" ID="ID_1007287631" MODIFIED="1512523916092" TEXT="pullFilter">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1512523897422" ID="ID_1007287631" MODIFIED="1512606862773" TEXT="pullFilter">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1512523905005" ID="ID_1286045611" MODIFIED="1512523921543" TEXT="wie "ausgewertet" merken?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1512606810364" ID="ID_1956085441" MODIFIED="1512606857354" STYLE="fork" TEXT="garnicht">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1512606816571" ID="ID_1603234787" MODIFIED="1512606853200" TEXT="mit INVARIANTE arbeiten">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1512606823682" ID="ID_1935971404" MODIFIED="1512606853200" TEXT="erfordert vorauseilendes Pullen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1512363846804" ID="ID_1346062807" MODIFIED="1512363878326" TEXT="auto-expand">
|
||||
|
|
@ -6287,8 +6296,8 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1511836579562" ID="ID_1718741335" MODIFIED="1512523829719" TEXT="verify_FilterIterator();">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1512523719350" ID="ID_351021178" MODIFIED="1512523742972" TEXT="einfaches Prädikat">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1512523719350" ID="ID_351021178" MODIFIED="1512606882124" TEXT="einfaches Prädikat">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1512523726885" ID="ID_282579718" MODIFIED="1512523741403" TEXT="konsumieren bis leer">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue