Navigator: draft skeletton of the patch matching algo

This commit is contained in:
Fischlurch 2018-01-01 20:05:18 +01:00
parent 416d6c7b01
commit 3598e07c59
5 changed files with 226 additions and 29 deletions

View file

@ -30,13 +30,15 @@
#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"
#include <boost/noncopyable.hpp>
//using util::cStr;
//using util::isnil;
using lib::Symbol;
using lib::treeExplore;
namespace gui {
@ -49,16 +51,36 @@ namespace interact {
/** @internal working data for path resolution */
struct UICoordResolver::ResolutionState
{
using ChildIter = LocationQuery::ChildIter;
lib::IterStack<ChildIter> backlog;
lib::IterQueue<Resolution> solutions;
};
namespace { //
class PathManipulator
: public UICoord
{
size_t currDepth_;
public:
PathManipulator ()
: UICoord{}
, currDepth_{0}
{ }
// inherited copy operations
UICoord const
retrieveResult()
{
UNIMPLEMENTED ("truncate to currDepth_");
PathArray::normalise();
return *this;
}
void
setAt (size_t depth, Literal newSpec)
{
UNIMPLEMENTED ("forcibly set content, ensure storage");
currDepth_ = depth;
}
};
}//(End) implementation details
@ -77,7 +99,40 @@ namespace interact {
bool
UICoordResolver::pathResolution()
{
return false; ////////////////////////TODO WIP
size_t maxDepth = 0;
PathManipulator coverage;
auto searchAlgo = query_.getChildren (this->uic_, 0)
.expandOnIteration()
.filter([&](auto& iter)
{
size_t depth = iter.depth();
Literal elm = uic_[depth];
coverage.setAt (depth,elm);
iter.expandChildren();
UNIMPLEMENTED ("bollocks");
return true;
})
.filter([&](auto& iter)
{
if (iter.depth() <= maxDepth)
return false;
maxDepth = iter.depth();
return true;
})
.transform([&](auto&)
{
return coverage.retrieveResult();
});
if (isnil (searchAlgo))
return false;
while (searchAlgo)
if (not res_.covfefe)
res_.covfefe.reset (new UICoord{*searchAlgo});
else
*res_.covfefe = *searchAlgo;
return true;
}

View file

@ -197,15 +197,13 @@ namespace interact {
{
const char* anchor = nullptr;
size_t depth = 0;
unique_ptr<UICoord> covfefe;
unique_ptr<UICoord> covfefe{};
bool isResolved = false;
};
LocationQuery& query_;
Resolution res_;
struct ResolutionState;
public:
UICoordResolver (UICoord const& uic, LocationQuery& queryAPI)
: Builder{uic}

View file

@ -622,7 +622,7 @@ namespace interact {
return window (UIC_FIRST_WINDOW);
}
/** @return aBuilder with just the windowID defined */
/** @return a Builder with just the windowID defined */
inline UICoord::Builder
UICoord::window (Literal windowID)
{

View file

@ -1178,7 +1178,7 @@ namespace lib {
* expandChildren() and iterNext() calls and redirects appropriately.
* @warning expandAll and expandOnIteration are not meant to be used at the same time.
* Recommendation is to use expandOnIteration() right above (after) the expand()
* definition, since interplay with intermingled layers can be complex
* definition, since interplay with intermingled layers can be complex.
*/
auto
expandOnIteration()

View file

@ -762,7 +762,7 @@
</node>
</node>
<node CREATED="1484876114521" ID="ID_1082250595" MODIFIED="1501778463955" TEXT="Protokoll zur Kommunikation">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1484876122960" ID="ID_31825421" MODIFIED="1501778561482" TEXT="UI-Bus nur im GUI-Thread">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1484876122960" ID="ID_31825421" MODIFIED="1514829311463" TEXT="UI-Bus nur im GUI-Thread">
<arrowlink COLOR="#6c5f80" DESTINATION="ID_489078622" ENDARROW="Default" ENDINCLINATION="289;0;" ID="Arrow_ID_485145709" STARTARROW="None" STARTINCLINATION="1538;-37;"/>
<linktarget COLOR="#b7748e" DESTINATION="ID_31825421" ENDARROW="Default" ENDINCLINATION="560;150;" ID="Arrow_ID_1434676575" SOURCE="ID_935689465" STARTARROW="Default" STARTINCLINATION="587;44;"/>
<icon BUILTIN="messagebox_warning"/>
@ -5218,7 +5218,7 @@
<node CREATED="1512278456672" ID="ID_488770369" MODIFIED="1512278462388" TEXT="wird in jedem Schritt gestrippt"/>
</node>
</node>
<node COLOR="#338800" CREATED="1510941463562" ID="ID_845080696" MODIFIED="1514748787067" TEXT="TreeExplorer">
<node COLOR="#338800" CREATED="1510941463562" FOLDED="true" ID="ID_845080696" MODIFIED="1514827423467" TEXT="TreeExplorer">
<linktarget COLOR="#8ad3a5" DESTINATION="ID_845080696" ENDARROW="Default" ENDINCLINATION="-230;134;" ID="Arrow_ID_253437970" SOURCE="ID_137835978" STARTARROW="None" STARTINCLINATION="-387;0;"/>
<linktarget COLOR="#406878" DESTINATION="ID_845080696" ENDARROW="Default" ENDINCLINATION="-88;-61;" ID="Arrow_ID_409690433" SOURCE="ID_1160853986" STARTARROW="None" STARTINCLINATION="-374;6;"/>
<linktarget COLOR="#585e9d" DESTINATION="ID_845080696" ENDARROW="Default" ENDINCLINATION="-23;161;" ID="Arrow_ID_402051988" SOURCE="ID_1359727169" STARTARROW="None" STARTINCLINATION="138;6;"/>
@ -5843,7 +5843,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1514747001446" ID="ID_127783087" MODIFIED="1514827221480" TEXT="scheduled-expand">
<node COLOR="#338800" CREATED="1514747001446" FOLDED="true" ID="ID_127783087" MODIFIED="1514827404540" TEXT="scheduled-expand">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1514747011989" ID="ID_108671176" MODIFIED="1514827156021" TEXT="neuer Layer">
<linktarget COLOR="#455b75" DESTINATION="ID_108671176" ENDARROW="Default" ENDINCLINATION="-973;135;" ID="Arrow_ID_1758556486" SOURCE="ID_836777766" STARTARROW="None" STARTINCLINATION="959;0;"/>
@ -6839,7 +6839,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1510941467586" ID="ID_381928532" MODIFIED="1514747042172" TEXT="TreeExplorer_test">
<node COLOR="#338800" CREATED="1510941467586" FOLDED="true" ID="ID_381928532" MODIFIED="1514827426934" TEXT="TreeExplorer_test">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1510969031378" ID="ID_1678287752" MODIFIED="1512927037810" TEXT="verify_wrappedIterator();">
<icon BUILTIN="button_ok"/>
@ -8356,7 +8356,7 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1510941748388" ID="ID_209463158" MODIFIED="1513477856265" TEXT="Zustands-Layer">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1510941748388" HGAP="38" ID="ID_209463158" MODIFIED="1514829197011" TEXT="Zustands-Layer" VSHIFT="1">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1514333524247" ID="ID_1136271037" MODIFIED="1514333534986" TEXT="Zustand ist...">
<node CREATED="1514333554411" ID="ID_1337747593" MODIFIED="1514333618358" TEXT="target (Pattern) const&amp;"/>
@ -8367,13 +8367,24 @@
</node>
<node CREATED="1514333825991" ID="ID_541168831" MODIFIED="1514333828842" TEXT="isSolution"/>
</node>
<node CREATED="1514338393316" ID="ID_1224653593" MODIFIED="1514342158300" TEXT="f&#xfc;r Element...">
<node CREATED="1514338393316" ID="ID_1224653593" MODIFIED="1514828898897" TEXT="f&#xfc;r jedes Element...">
<node CREATED="1514338471073" ID="ID_1000829527" MODIFIED="1514338480556" TEXT="target[depth] ==?">
<node CREATED="1514338493135" ID="ID_1691944473" MODIFIED="1514341293287" TEXT="Ausgang wenn...">
<node CREATED="1514340242945" ID="ID_150794139" MODIFIED="1514340265770" TEXT="target zuende"/>
<node CREATED="1514340273349" ID="ID_1117812340" MODIFIED="1514340288207" TEXT="kein match"/>
<node CREATED="1514340293010" ID="ID_108821287" MODIFIED="1514341315443" TEXT="L&#xf6;sung...?">
<icon BUILTIN="help"/>
<node CREATED="1514340293010" ID="ID_108821287" MODIFIED="1514827957731">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
ist <i>keine </i>L&#246;sung
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1514338508292" ID="ID_1940839257" MODIFIED="1514338549050" TEXT="sonst">
@ -8381,6 +8392,67 @@
<node CREATED="1514338597880" ID="ID_413282334" MODIFIED="1514338602923" TEXT="match -&gt; setzen"/>
<node CREATED="1514341358818" ID="ID_1685868652" MODIFIED="1514341368133" TEXT="covered := depth()"/>
<node CREATED="1514338641730" ID="ID_878171387" MODIFIED="1514747321433" TEXT="scheduleExpansion()"/>
<node CREATED="1514827974184" ID="ID_1774080036" MODIFIED="1514827990059">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
ist <i>partielle </i>L&#246;sung
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514828322209" HGAP="531" ID="ID_868482472" MODIFIED="1514828439975" TEXT="Implementierung" VSHIFT="13">
<icon BUILTIN="pencil"/>
<node CREATED="1514828365236" ID="ID_596741108" MODIFIED="1514828377582" TEXT="per Seiteneffekt auf den privaten Resolver-state"/>
<node CREATED="1514828408694" ID="ID_360791024" MODIFIED="1514828619139">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<i>Ergebnis-Ausgabe </i>ist die jeweilige m&#246;gliche Coverage
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1514847720759" ID="ID_831358447" MODIFIED="1514847725306" TEXT="Struktur">
<node CREATED="1514847726158" ID="ID_460639525" MODIFIED="1514847735617" TEXT="wo brauche ich Builder?">
<node CREATED="1514847747979" ID="ID_710804937" MODIFIED="1514847782198" TEXT="target ist ein Builder, wird aber nicht ge&#xe4;ndert">
<icon BUILTIN="smily_bad"/>
</node>
<node CREATED="1514847769184" ID="ID_567857702" MODIFIED="1514847778011" TEXT="neue Coverage mu&#xdf; ge&#xe4;ndert werden">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1514847804652" ID="ID_1778000574" MODIFIED="1514847809471" TEXT="sind Builder sinnvoll?">
<node CREATED="1514847810723" ID="ID_468954134" MODIFIED="1514847816622" TEXT="gegenw&#xe4;rtig nicht klar"/>
<node CREATED="1514847817306" ID="ID_417284469" MODIFIED="1514847833963" TEXT="UICoord soll immutable sein">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1514847837399" ID="ID_198877050" MODIFIED="1514847846314" TEXT="Problem Normalisierung">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1514847847398" ID="ID_1538721674" MODIFIED="1514847856905" TEXT="Builder-Funktionen k&#xf6;nnen denormalisieren"/>
<node CREATED="1514847857748" ID="ID_1388054576" MODIFIED="1514847876837" TEXT="der Matching-Algo verl&#xe4;&#xdf;t sich auf die Normalisierung">
<icon BUILTIN="clanbomber"/>
</node>
<node CREATED="1514847882601" ID="ID_1468209152" MODIFIED="1514847895570" TEXT="beim Verlassen eines Builders ist erneut zu normalisieren">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1514847919164" ID="ID_1457973741" MODIFIED="1514847925895" TEXT="spezieller Manipulations-Builder">
<node CREATED="1514847939937" ID="ID_1183828033" MODIFIED="1514847949844" TEXT="erlaubt punktweise Manipulation"/>
<node CREATED="1514847950576" ID="ID_1211653233" MODIFIED="1514850848636" TEXT="normalisiert automatisch beim Abholen des Ergebnisses"/>
</node>
</node>
</node>
@ -8433,7 +8505,8 @@
</node>
<node CREATED="1514746306619" ID="ID_1050824210" MODIFIED="1514746324227" TEXT="&#xfc;berall partielle L&#xf6;sungen m&#xf6;glich"/>
<node CREATED="1514746345078" ID="ID_1469851869" MODIFIED="1514746354935" TEXT="wir wissen nicht, ob expand &#xfc;berhaupt geht"/>
<node CREATED="1514746367418" ID="ID_1714254434" MODIFIED="1514746380840" TEXT="L&#xf6;sungsidee: partielle L&#xf6;sungen filtern">
<node CREATED="1514746367418" ID="ID_1714254434" MODIFIED="1514827781975" TEXT="L&#xf6;sungsidee: partielle L&#xf6;sungen filtern">
<arrowlink COLOR="#426785" DESTINATION="ID_43243557" ENDARROW="Default" ENDINCLINATION="156;-113;" ID="Arrow_ID_977247001" STARTARROW="None" STARTINCLINATION="-109;6;"/>
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514747333011" ID="ID_1334730598" MODIFIED="1514747380472" TEXT="Rekursion f&#xe4;llt weg">
@ -8460,11 +8533,14 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1510941754211" ID="ID_996085388" MODIFIED="1513477857872" TEXT="Filter-Layer">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1510941754211" HGAP="36" ID="ID_996085388" MODIFIED="1514829205434" TEXT="Filter-Layer" VSHIFT="-1">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1514747460122" ID="ID_1735380227" MODIFIED="1514747469156" TEXT="fischt nach tats&#xe4;chlichen L&#xf6;sungen"/>
<node CREATED="1514747470624" ID="ID_43243557" MODIFIED="1514747479299" TEXT="erm&#xf6;glicht partielle und maximale L&#xf6;sungen"/>
<node CREATED="1514747496973" ID="ID_1992822141" MODIFIED="1514747499672" TEXT="F&#xe4;lle">
<node CREATED="1514747470624" ID="ID_43243557" MODIFIED="1514827781975" TEXT="erm&#xf6;glicht partielle und maximale L&#xf6;sungen">
<linktarget COLOR="#426785" DESTINATION="ID_43243557" ENDARROW="Default" ENDINCLINATION="156;-113;" ID="Arrow_ID_977247001" SOURCE="ID_1714254434" STARTARROW="None" STARTINCLINATION="-109;6;"/>
</node>
<node CREATED="1514747496973" ID="ID_1992822141" MODIFIED="1514829326442" TEXT="F&#xe4;lle">
<linktarget COLOR="#c34a6d" DESTINATION="ID_1992822141" ENDARROW="Default" ENDINCLINATION="16;64;" ID="Arrow_ID_26195276" SOURCE="ID_1556354374" STARTARROW="Default" STARTINCLINATION="-2;-11;"/>
<node CREATED="1514747500948" ID="ID_849508712" MODIFIED="1514747505528" TEXT="erste totale L&#xf6;sung"/>
<node CREATED="1514747506516" ID="ID_1823650567" MODIFIED="1514747510710" TEXT="alle totalen L&#xf6;sungen"/>
<node CREATED="1514747511683" ID="ID_1711746734" MODIFIED="1514747525357" TEXT="erste maximale partielle L&#xf6;sung"/>
@ -8477,7 +8553,75 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1510941766817" ID="ID_1117346518" MODIFIED="1513477861712" TEXT="Testf&#xe4;lle">
<node CREATED="1514829169777" HGAP="32" ID="ID_331008637" MODIFIED="1514829187105" TEXT="Integration" VSHIFT="10">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514829220907" ID="ID_1488508113" MODIFIED="1514829258188" TEXT="zun&#xe4;chst Algo f&#xfc;r partielle Coverage bauen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1514829338427" ID="ID_623381151" MODIFIED="1514850789328" TEXT="Zustandstyp">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1514829343538" ID="ID_61753442" MODIFIED="1514850787118" TEXT="Transformer auf Zustand">
<icon BUILTIN="button_cancel"/>
<node CREATED="1514850791535" ID="ID_1339395363" MODIFIED="1514850794763" TEXT="nicht notwendig"/>
<node CREATED="1514850795678" ID="ID_497352305" MODIFIED="1514850803482" TEXT="Zustand per Seiteneffekt">
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1514829349585" ID="ID_1389488008" MODIFIED="1514850813309" TEXT="Algo-Kern">
<icon BUILTIN="flag-pink"/>
</node>
<node COLOR="#338800" CREATED="1514829353681" ID="ID_62480447" MODIFIED="1514850810350" TEXT="einfachster Filter">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514829412249" ID="ID_1641757769" MODIFIED="1514829549428" TEXT="Einbindung Resolution-State">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1514829452692" ID="ID_1692090746" MODIFIED="1514829463589" TEXT="nested Class">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514829466506" ID="ID_1652951449" MODIFIED="1514829521715" TEXT="Konstruktor zum Ankoppeln">
<icon BUILTIN="flag-yellow"/>
</node>
<node COLOR="#338800" CREATED="1514829511716" ID="ID_747113559" MODIFIED="1514850777417" TEXT="Pipeline-Builder wie?">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514829532945" ID="ID_1664484116" MODIFIED="1514829537090" TEXT="Ergebnis-Abruf">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514829238960" ID="ID_1556354374" MODIFIED="1514829326442" TEXT="Varianten definieren">
<arrowlink COLOR="#c34a6d" DESTINATION="ID_1992822141" ENDARROW="Default" ENDINCLINATION="16;64;" ID="Arrow_ID_26195276" STARTARROW="Default" STARTINCLINATION="-2;-11;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514848454621" ID="ID_472406160" MODIFIED="1514848465900" TEXT="std::swap f&#xfc;r UICoord">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1514848818421" ID="ID_26529397" MODIFIED="1514848859010" TEXT="vermutlich nix zu tun">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<ul>
<li>
die Standard-Implementierung von std::swap macht einen Dreiecks-Move
</li>
<li>
wir haben effiziente Move-Konstruktoren
</li>
</ul>
</body>
</html>
</richcontent>
</node>
<node CREATED="1514848861831" ID="ID_297570158" MODIFIED="1514848873234" TEXT="noexcept() bedenken"/>
<node CREATED="1514848874005" ID="ID_751821458" MODIFIED="1514848890774" TEXT="PathArray: move effizienter als swap">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1514829244384" ID="ID_174527898" MODIFIED="1514829250504" TEXT="API umstellen">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1510941766817" HGAP="13" ID="ID_1117346518" MODIFIED="1514829215489" TEXT="Testf&#xe4;lle" VSHIFT="29">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513477873206" ID="ID_939423021" MODIFIED="1513477891813" TEXT="definieren was abzudecken ist...">
<icon BUILTIN="yes"/>
@ -18665,7 +18809,7 @@
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501778430101" ID="ID_489078622" MODIFIED="1501778561482" TEXT="#1098 hand-over to UI thread">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1501778430101" ID="ID_489078622" MODIFIED="1514829311464" TEXT="#1098 hand-over to UI thread">
<linktarget COLOR="#6c5f80" DESTINATION="ID_489078622" ENDARROW="Default" ENDINCLINATION="289;0;" ID="Arrow_ID_485145709" SOURCE="ID_31825421" STARTARROW="None" STARTINCLINATION="1538;-37;"/>
<icon BUILTIN="flag-yellow"/>
</node>