Navigator: implement the mutation operations defined thus far
...so the only thing not yet implemented is the actual path resolution algorithm
This commit is contained in:
parent
e035dbc54a
commit
ca35891c41
2 changed files with 52 additions and 18 deletions
|
|
@ -50,7 +50,7 @@
|
||||||
#include "gui/interact/ui-coord.hpp"
|
#include "gui/interact/ui-coord.hpp"
|
||||||
#include "lib/iter-source.hpp"
|
#include "lib/iter-source.hpp"
|
||||||
#include "lib/iter-stack.hpp"
|
#include "lib/iter-stack.hpp"
|
||||||
//#include "lib/util.hpp"
|
#include "lib/util.hpp"
|
||||||
|
|
||||||
//#include <boost/noncopyable.hpp>
|
//#include <boost/noncopyable.hpp>
|
||||||
//#include <string>
|
//#include <string>
|
||||||
|
|
@ -68,7 +68,7 @@ namespace interact {
|
||||||
// using std::string;
|
// using std::string;
|
||||||
using lib::Literal;
|
using lib::Literal;
|
||||||
// using lib::Symbol;
|
// using lib::Symbol;
|
||||||
// using util::unConst;
|
using util::unConst;
|
||||||
// using util::isnil;
|
// using util::isnil;
|
||||||
// using util::min;
|
// using util::min;
|
||||||
|
|
||||||
|
|
@ -198,7 +198,7 @@ namespace interact {
|
||||||
{
|
{
|
||||||
return isAnchored()
|
return isAnchored()
|
||||||
or (res_.isResolved and res_.covfefe)
|
or (res_.isResolved and res_.covfefe)
|
||||||
or pathResolution()
|
or unConst(this)->pathResolution()
|
||||||
or isAnchored(); // resolution failed, but computed at least an anchor
|
or isAnchored(); // resolution failed, but computed at least an anchor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -215,6 +215,14 @@ namespace interact {
|
||||||
and res_.depth > 0;
|
and res_.depth > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** there is no extraneous uncovered suffix in this path spec */
|
||||||
|
bool
|
||||||
|
isTotallyCovered() const
|
||||||
|
{
|
||||||
|
return res_.isResolved
|
||||||
|
and res_.depth == this->uic_.size();
|
||||||
|
}
|
||||||
|
|
||||||
/** determine if a mutation is possible to get the path (partially) covered.
|
/** determine if a mutation is possible to get the path (partially) covered.
|
||||||
* @remarks in order to be successful, a path resolution must interpolate any gaps in the
|
* @remarks in order to be successful, a path resolution must interpolate any gaps in the
|
||||||
* path spec _and_ reach a point behind / below the gap (wildcards), where an existing
|
* path spec _and_ reach a point behind / below the gap (wildcards), where an existing
|
||||||
|
|
@ -229,29 +237,51 @@ namespace interact {
|
||||||
{
|
{
|
||||||
return isCovered()
|
return isCovered()
|
||||||
or (res_.isResolved and res_.covfefe)
|
or (res_.isResolved and res_.covfefe)
|
||||||
or pathResolution();
|
or unConst(this)->pathResolution();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* === mutation functions === */
|
/* === mutation functions === */
|
||||||
|
|
||||||
/**
|
/** mutate the path to get it totally covered
|
||||||
*/
|
*/
|
||||||
UICoordResolver
|
UICoordResolver
|
||||||
cover()
|
cover()
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED ("mutate the path to get it covered");
|
if (isCovered())
|
||||||
|
truncateTo (res_.depth);
|
||||||
|
else if (canCover())
|
||||||
|
{
|
||||||
|
ASSERT (res_.isResolved);
|
||||||
|
REQUIRE (res_.covfefe);
|
||||||
|
res_.depth = res_.covfefe->size();
|
||||||
|
std::swap (this->uic_, *res_.covfefe);
|
||||||
|
res_.covfefe.reset();
|
||||||
|
ENSURE (isTotallyCovered());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ASSERT (res_.isResolved);
|
||||||
|
REQUIRE (res_.depth == 0);
|
||||||
|
REQUIRE (not res_.covfefe);
|
||||||
|
truncateTo (0);
|
||||||
|
}
|
||||||
return std::move (*this);
|
return std::move (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/** mutate the path to extend it while keeping it partially covered
|
||||||
*/
|
*/
|
||||||
UICoordResolver
|
UICoordResolver
|
||||||
extend (Literal pathExtension)
|
extend (Literal pathExtension)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED ("mutate the path to extend it while keeping it partially covered");
|
if (not isTotallyCovered())
|
||||||
|
cover();
|
||||||
|
ENSURE (isTotallyCovered());
|
||||||
|
append (pathExtension);
|
||||||
|
res_.depth = query_.determineCoverage (this->uic_); // coverage may grow
|
||||||
|
ENSURE (isCovered());
|
||||||
return std::move (*this);
|
return std::move (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4254,8 +4254,9 @@
|
||||||
</richcontent>
|
</richcontent>
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508537057661" ID="ID_1582824657" MODIFIED="1508537073664" TEXT="was heißt "covern"?">
|
<node CREATED="1508537057661" ID="ID_1582824657" MODIFIED="1509329323916" TEXT="was heißt "covern"?">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
<node CREATED="1508538092061" ID="ID_731131821" MODIFIED="1508538096663" TEXT="komplett/partiell?"/>
|
<node CREATED="1508538092061" ID="ID_731131821" MODIFIED="1508538096663" TEXT="komplett/partiell?"/>
|
||||||
<node CREATED="1508538108338" ID="ID_1403158284" MODIFIED="1508625730742" TEXT="so gut wie möglich">
|
<node CREATED="1508538108338" ID="ID_1403158284" MODIFIED="1508625730742" TEXT="so gut wie möglich">
|
||||||
<icon BUILTIN="forward"/>
|
<icon BUILTIN="forward"/>
|
||||||
|
|
@ -4542,9 +4543,11 @@
|
||||||
<node CREATED="1508540764667" ID="ID_772420189" MODIFIED="1508540772133" TEXT="scheitert: Anchor == bottom"/>
|
<node CREATED="1508540764667" ID="ID_772420189" MODIFIED="1508540772133" TEXT="scheitert: Anchor == bottom"/>
|
||||||
<node CREATED="1508540811196" ID="ID_841748634" MODIFIED="1508540819447" TEXT="Ergebnis: Window-Komponente setzen"/>
|
<node CREATED="1508540811196" ID="ID_841748634" MODIFIED="1508540819447" TEXT="Ergebnis: Window-Komponente setzen"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1508539195258" ID="ID_1044429952" MODIFIED="1508539197986" TEXT="cover">
|
<node COLOR="#338800" CREATED="1508539195258" ID="ID_1044429952" MODIFIED="1509329355200" TEXT="cover">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node CREATED="1508540823475" ID="ID_793410656" MODIFIED="1508540829869" TEXT="path-resolution ausführen"/>
|
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1508540823475" ID="ID_793410656" MODIFIED="1509329351169" TEXT="path-resolution ausführen">
|
||||||
|
<icon BUILTIN="flag-pink"/>
|
||||||
|
</node>
|
||||||
<node CREATED="1508540835505" ID="ID_191493714" MODIFIED="1508540848899" TEXT="swap(*this, Coverage)"/>
|
<node CREATED="1508540835505" ID="ID_191493714" MODIFIED="1508540848899" TEXT="swap(*this, Coverage)"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -4666,11 +4669,12 @@
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1506984614487" ID="ID_380908645" MODIFIED="1506984616051" TEXT="UICoordResolver_test">
|
<node CREATED="1506984614487" ID="ID_380908645" MODIFIED="1509329414242" TEXT="UICoordResolver_test">
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506984645745" ID="ID_244163155" MODIFIED="1506984665826" TEXT="verify_simpleUsage">
|
<icon BUILTIN="pencil"/>
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1506984645745" ID="ID_244163155" MODIFIED="1509329383990" TEXT="verify_simpleUsage">
|
||||||
|
<icon BUILTIN="pencil"/>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1506984645747" ID="ID_517262443" MODIFIED="1509288984297" TEXT="verify_backingQuery">
|
<node COLOR="#338800" CREATED="1506984645747" FOLDED="true" ID="ID_517262443" MODIFIED="1509329403961" TEXT="verify_backingQuery">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node CREATED="1508809610790" FOLDED="true" ID="ID_1860790851" MODIFIED="1509145537374" TEXT="Builder-Syntax war falsch">
|
<node CREATED="1508809610790" FOLDED="true" ID="ID_1860790851" MODIFIED="1509145537374" TEXT="Builder-Syntax war falsch">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
|
|
@ -4712,7 +4716,7 @@
|
||||||
<icon BUILTIN="ksmiletris"/>
|
<icon BUILTIN="ksmiletris"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1509142651113" FOLDED="true" ID="ID_99734013" MODIFIED="1509319931404">
|
<node CREATED="1509142651113" FOLDED="true" ID="ID_99734013" MODIFIED="1509329402043">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue