Library: complete implementation of Map-databinding
...using a ''special protocol'' to represent iterative data sequences * use an Index-Key with a CSV list of element prefixes * synthesise key-prefixes for each data element * perform lookup with the decorated key first This allows to somehow ''emulate'' nested associations within a single, flat Map. Obviously this is more like a proof-of-concept; actually the Map-databinding is meant to handle the simple cases, where just placeholders are to be substituted. The logic structures are much more relevant when binding to structural data, most notably to the Lumiera _External Tree Description_ format, which is used for model data and inter-layer communication.
This commit is contained in:
parent
58ffbac7f3
commit
c09f44e20f
2 changed files with 134 additions and 80 deletions
|
|
@ -122,6 +122,7 @@ namespace lib {
|
|||
using StrView = std::string_view;
|
||||
|
||||
using util::_Fmt;
|
||||
using util::isnil;
|
||||
using util::unConst;
|
||||
|
||||
|
||||
|
|
@ -140,7 +141,7 @@ namespace lib {
|
|||
iterNestedKeys (string key, string const& iterDef)
|
||||
{
|
||||
return explore (util::RegexSearchIter{iterDef, ACCEPT_DATA_ELM})
|
||||
.transform ([&](smatch mat){ return key+"."+string{mat[1]}; });
|
||||
.transform ([&](smatch mat){ return key+"."+string{mat[1]}+"."; });
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -521,37 +522,75 @@ namespace lib {
|
|||
|
||||
using MapS = std::map<string,string>;
|
||||
|
||||
/**
|
||||
* Data-binding for a Map-of-strings.
|
||||
* Simple keys are retrieved by direct lookup.
|
||||
* For the representation of nested data sequences,
|
||||
* the following conventions apply
|
||||
* - the data sequence itself is represented by an index-key
|
||||
* - the value associated to this index-key is a CSV sequence
|
||||
* - each element in this sequence defines a key prefix
|
||||
* - nested keys are then defined as `<index-key>.<elm-key>.<key>`
|
||||
* - when key decoration is enabled for a nested data source, each
|
||||
* lookup for a given key is first tried with the prefix, then as-is.
|
||||
* Consequently, all data in the sequence must be present in the original
|
||||
* map, stored under the decorated keys.
|
||||
* @note multiply nested sequences are _not supported._
|
||||
* While it _is_ possible to have nested loops, the resulting sets
|
||||
* of keys must be disjoint and data must be present in the base map.
|
||||
* @see TextTemplate_test::verify_Map_binding()
|
||||
*/
|
||||
template<>
|
||||
struct TextTemplate::DataSource<MapS>
|
||||
{
|
||||
MapS const * data_;
|
||||
using Iter = decltype(iterNestedKeys("",""));
|
||||
string keyPrefix_{};
|
||||
|
||||
bool isNested() { return not isnil (keyPrefix_); }
|
||||
|
||||
|
||||
bool
|
||||
contains (string key)
|
||||
{
|
||||
return util::contains (*data_, key);
|
||||
return (isNested() and util::contains (*data_, keyPrefix_+key))
|
||||
or util::contains (*data_, key);
|
||||
}
|
||||
|
||||
string const&
|
||||
retrieveContent (string key)
|
||||
{
|
||||
auto elm = data_->find (key);
|
||||
MapS::const_iterator elm;
|
||||
if (isNested())
|
||||
{
|
||||
elm = data_->find (keyPrefix_+key);
|
||||
if (elm == data_->end())
|
||||
elm = data_->find (key);
|
||||
}
|
||||
else
|
||||
elm = data_->find (key);
|
||||
ENSURE (elm != data_->end());
|
||||
return elm->second;
|
||||
}
|
||||
|
||||
|
||||
using Iter = decltype(iterNestedKeys("",""));
|
||||
|
||||
Iter
|
||||
getSequence (string key)
|
||||
{
|
||||
UNIMPLEMENTED ("extract data sequence from definition key");
|
||||
if (not contains(key))
|
||||
return Iter{};
|
||||
else
|
||||
return iterNestedKeys (key, retrieveContent(key));
|
||||
}
|
||||
|
||||
DataSource
|
||||
openContext (Iter& iter)
|
||||
{
|
||||
REQUIRE (iter);
|
||||
UNIMPLEMENTED ("open a nested sub-data-ctx based on the given iterator");
|
||||
DataSource nested{*this};
|
||||
nested.keyPrefix_ = *iter;
|
||||
return nested;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -112477,11 +112477,11 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710723556427" ID="ID_967894122" MODIFIED="1710723653752" TEXT="Baukastensystem — kein Framework">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710723662213" ID="ID_454325758" MODIFIED="1710723719430" TEXT="Ersetzung per ${Name}">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#990000" CREATED="1710723662213" ID="ID_454325758" MODIFIED="1711336107467" TEXT="Ersetzung per ${Name}">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1710792595619" ID="ID_1847669087" MODIFIED="1710792697841" TEXT="mögliche weitere Features">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#45406d" CREATED="1710792595619" ID="ID_1847669087" MODIFIED="1711336505291" TEXT="unterstützt einfache Logik-Konstrukte">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1710792606209" ID="ID_1610911585" MODIFIED="1710805681293" TEXT="${if ID} ... ${else [ID]} ... ${end if ID}"/>
|
||||
<node CREATED="1710792634661" ID="ID_584250278" MODIFIED="1710805692772" TEXT="${for ID} ... ${else [ID]} ... ${end for ID}"/>
|
||||
</node>
|
||||
|
|
@ -112496,8 +112496,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710792755709" ID="ID_952834241" MODIFIED="1710792828516" TEXT="ein situativ-funktionales Daten-Binding">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#435e98" CREATED="1710792755709" ID="ID_952834241" MODIFIED="1711336122669" TEXT="ein situativ-funktionales Daten-Binding">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710792833458" ID="ID_275925925" MODIFIED="1710792878693" TEXT="ein generischer Standard-Adapter für map-artigen Zugriff">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
|
|
@ -112505,12 +112505,12 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793061549" ID="ID_896868325" MODIFIED="1710793066570" TEXT="Implementierung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710793061549" ID="ID_896868325" MODIFIED="1711336391576" TEXT="Implementierung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1710793071787" ID="ID_697532669" MODIFIED="1710811850787" TEXT="Rahmen in lib/text-template.hpp">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1710809059429" ID="ID_332847297" MODIFIED="1710809198212" TEXT="class TextTemplate">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1710809059429" ID="ID_332847297" MODIFIED="1711336132795" TEXT="class TextTemplate">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1710809189941" ID="ID_392724858" MODIFIED="1710811854998" TEXT="nested definitions">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -112518,12 +112518,13 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710809220249" ID="ID_1049694621" MODIFIED="1710809223876" TEXT="enum Code"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793119597" ID="ID_1328122626" MODIFIED="1710793127228" TEXT="Design">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#2a0fad" CREATED="1710793119597" ID="ID_1328122626" MODIFIED="1711336460037" TEXT="Design">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1710793135490" ID="ID_1136896163" MODIFIED="1710811869814" TEXT="Binding">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793140948" ID="ID_1992696242" MODIFIED="1710793164256" TEXT="Schema für Binding anlegen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710793140948" ID="ID_1992696242" MODIFIED="1711336422206" TEXT="Schema für Binding anlegen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1710793148025" ID="ID_1493105822" MODIFIED="1710811861955" TEXT="das Binding-callback-API definieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -112621,13 +112622,13 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793178661" ID="ID_1043138581" MODIFIED="1710793271816" TEXT="Parser">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793274688" ID="ID_1785713892" MODIFIED="1710793282863" TEXT="RegExp - Iteration">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710793178661" ID="ID_1043138581" MODIFIED="1711336174610" TEXT="Parser">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1710793274688" ID="ID_1785713892" MODIFIED="1711336170787" TEXT="RegExp - Iteration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793301196" ID="ID_42591067" MODIFIED="1710793305367" TEXT="Basis-Tokens">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710793301196" ID="ID_42591067" MODIFIED="1711336172340" TEXT="Basis-Tokens">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1710800049563" ID="ID_1822369135" MODIFIED="1711311789300" TEXT="Arbeitsprinzip">
|
||||
|
|
@ -112645,16 +112646,18 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710800342067" ID="ID_596660101" MODIFIED="1710800360272" TEXT="diese adressieren andere Instruktionen per direkter Index-ID"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793189554" ID="ID_1486654440" MODIFIED="1710793220336" TEXT="Template-Processor">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793221783" ID="ID_2381771" MODIFIED="1710793242797" TEXT="Template-Definition">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#435e98" CREATED="1710793189554" ID="ID_1486654440" MODIFIED="1711336407247" TEXT="Template-Processor">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node COLOR="#435e98" CREATED="1710793221783" ID="ID_2381771" MODIFIED="1711336229806" TEXT="Template-Definition">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793245457" ID="ID_1022549828" MODIFIED="1710793256443" TEXT="per ctor mit Raw-String">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710793245457" ID="ID_1022549828" MODIFIED="1711336221755" TEXT="Spec als String wird unmittelbar geparst">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793257202" ID="ID_1216732700" MODIFIED="1710793267357" TEXT="alternativer ctor zum Laden aus Datei">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1710793257202" ID="ID_1216732700" MODIFIED="1711336183863" TEXT="alternativer ctor zum Laden aus Datei">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1711336184788" ID="ID_327310540" MODIFIED="1711336193079" TEXT="später mal (bei Bedarf...)"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -112731,8 +112734,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710809364702" ID="ID_1039397469" MODIFIED="1710809374320" TEXT="struct Instance<Binding>"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710799996889" ID="ID_1910948400" MODIFIED="1710800002425" TEXT="Processing">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710799996889" ID="ID_1910948400" MODIFIED="1711336380860" TEXT="Processing">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1710799920412" ID="ID_1195498496" MODIFIED="1711323991738" TEXT="parsing">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1710804975672" ID="ID_1778438879" MODIFIED="1711311749543" TEXT="Reg-Exp-Iteration auf die Tag-Syntax">
|
||||
|
|
@ -112854,10 +112857,10 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710799932570" ID="ID_1103663065" MODIFIED="1710799946174" TEXT="instance">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710800667346" ID="ID_299824445" MODIFIED="1710800700515" TEXT="handzuhabende Situationen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710799932570" ID="ID_1103663065" MODIFIED="1711336375053" TEXT="instance">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1710800667346" ID="ID_299824445" MODIFIED="1711336365428" TEXT="handzuhabende Situationen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#435e98" CREATED="1710800705306" ID="ID_906431564" MODIFIED="1711326090062" TEXT="literaler Textblock">
|
||||
<node CREATED="1710800725888" ID="ID_1235186459" MODIFIED="1710800731914" TEXT="Text liegt im Speicher"/>
|
||||
<node CREATED="1710800732695" ID="ID_777704048" MODIFIED="1710800741009" TEXT="wird in die Ausgabe übertragen"/>
|
||||
|
|
@ -112908,8 +112911,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710807154373" ID="ID_1583286685" MODIFIED="1710807157096" TEXT="nichts zu tun"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710802324329" ID="ID_431802587" MODIFIED="1710802329041" TEXT="funktionale Elemente">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#338800" CREATED="1710802324329" ID="ID_431802587" MODIFIED="1711336368291" TEXT="funktionale Elemente">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1710802404231" ID="ID_417674931" MODIFIED="1710802420784" TEXT="active DataSrc"/>
|
||||
<node CREATED="1710802472877" ID="ID_1932723676" MODIFIED="1710802476682" TEXT="active Element">
|
||||
<node CREATED="1710802550515" ID="ID_900437708" MODIFIED="1710802555782" TEXT="typischerweise ein Iterator"/>
|
||||
|
|
@ -112925,18 +112928,18 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710856691780" ID="ID_763640380" MODIFIED="1710856698164" TEXT="Rahmen schaffen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1710856691780" ID="ID_763640380" MODIFIED="1711336351889" TEXT="Rahmen schaffen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1710856716918" ID="ID_1752947576" MODIFIED="1710856723204" TEXT="rückwärts vorgehen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1710856729291" ID="ID_1875406462" MODIFIED="1710859944223" TEXT="die Instantiierung erfolgt lazy ⟹ Iterator-Pipeline">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1710856729291" FOLDED="true" ID="ID_1875406462" MODIFIED="1711336349160" TEXT="die Instantiierung erfolgt lazy ⟹ Iterator-Pipeline">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1710856916531" ID="ID_1047340326" MODIFIED="1710856926342" TEXT="die ActionSeq konsumieren"/>
|
||||
<node CREATED="1710857877562" ID="ID_707601175" MODIFIED="1710857911451" TEXT="Instantiierungs-Prozessor : function-mapping"/>
|
||||
<node CREATED="1710858136177" ID="ID_1016066994" MODIFIED="1710858673982" TEXT="logische Signatur des Einzelschrits: (Action, Binding, Ctx) ⟼ string"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1710858917164" ID="ID_1301011429" MODIFIED="1710889523599" TEXT="praktischer Ansatz: IterableDecorator einer InscanceCore">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1710858917164" FOLDED="true" ID="ID_1301011429" MODIFIED="1711336332858" TEXT="praktischer Ansatz: IterableDecorator einer InscanceCore">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1710889530609" ID="ID_1033056147" MODIFIED="1710889545299" TEXT="diese beinhaltet den Interpreter-State"/>
|
||||
<node CREATED="1710889546263" ID="ID_1579638728" MODIFIED="1710889557098" TEXT="einschließlich der Möglichkeit verschachtelter States"/>
|
||||
<node CREATED="1710889557878" ID="ID_1797783109" MODIFIED="1710889645948" TEXT="letzteres ist aber als seltene/optionale Erweiterung anzusetzen">
|
||||
|
|
@ -112954,8 +112957,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710859083131" ID="ID_1103676674" MODIFIED="1710859102540" TEXT="const- referenziert die Daten"/>
|
||||
<node CREATED="1710859106953" ID="ID_1570382274" MODIFIED="1710859128336" TEXT="implementiert das Binding-Concept"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1710859064221" ID="ID_190332829" MODIFIED="1710889769933" TEXT="stellt außerdem einen Stack für Verschachtelung bereit">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1710859064221" ID="ID_190332829" MODIFIED="1711336006569" TEXT="stellt außerdem einen Stack für Verschachtelung bereit">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1710889849728" ID="ID_399157295" MODIFIED="1710889858546" TEXT="falls leer ⟹ einfacher Standardfall"/>
|
||||
<node CREATED="1710889859678" ID="ID_1032750724" MODIFIED="1710889877399" TEXT="sonst: muß sich jeweils die Vorgänger-DataSrc merken"/>
|
||||
<node CREATED="1710889878990" ID="ID_936276949" MODIFIED="1710889900005" TEXT="...um diese vor dem pop() wiederherstellen zu können"/>
|
||||
|
|
@ -112966,18 +112969,18 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710901576799" ID="ID_309524144" MODIFIED="1710901587322" TEXT="überall beißt sich die Katze in den Schwanz"/>
|
||||
<node CREATED="1710901588837" ID="ID_1966885383" MODIFIED="1710901606703" TEXT="ich will die Implementierungs-Logik möglichst weit nach unten schieben"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1710898561618" ID="ID_961175411" MODIFIED="1710898581408" TEXT="Optimierung: string_view durch das ganze System durchfädeln">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1710898561618" FOLDED="true" ID="ID_961175411" MODIFIED="1711336328074" TEXT="Optimierung: string_view durch das ganze System durchfädeln">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1710898588958" ID="ID_329918455" MODIFIED="1710898606712" TEXT="es läuft stets auf einen koordinierten Datenzugriff hinaus"/>
|
||||
<node CREATED="1710898607588" ID="ID_1515577566" MODIFIED="1710898620430" TEXT="und die Datenstruktur wird referenziert während der Instantiierung"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710898624785" ID="ID_153699526" MODIFIED="1710898818451" TEXT="⟹ theoretisch sollte es möglich sein durch den gesamten Prozeß hindurch zu referenzieren">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1710898624785" ID="ID_153699526" MODIFIED="1711336018243" TEXT="⟹ theoretisch sollte es möglich sein durch den gesamten Prozeß hindurch zu referenzieren">
|
||||
<node CREATED="1710898727250" ID="ID_1040294627" MODIFIED="1710898736225" TEXT="die Keys sind zwar kurz..."/>
|
||||
<node CREATED="1710898736874" ID="ID_379388881" MODIFIED="1710898751668" TEXT="aber die konstanten Template-Bestandteile sind (sehr) lang"/>
|
||||
<node CREATED="1710898758439" ID="ID_40861357" MODIFIED="1710898781000" TEXT="mit String-Values würde zudem auf vielen Ebenen kopiert und Heap-Memory verwaltet"/>
|
||||
<node CREATED="1710898782460" ID="ID_1183887615" MODIFIED="1710901418729" TEXT="und letztlich verlangt auch das Iterator-Konzept eine Referenz vom »core-yield«">
|
||||
<arrowlink COLOR="#756ac6" DESTINATION="ID_98335183" ENDARROW="Default" ENDINCLINATION="63;-36;" ID="Arrow_ID_506603112" STARTARROW="None" STARTINCLINATION="-260;10;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1710898830750" ID="ID_629945091" MODIFIED="1710898839421" TEXT="ist das auch praktisch machbar?">
|
||||
<node BACKGROUND_COLOR="#ecbc9f" COLOR="#990033" CREATED="1710898830750" ID="ID_629945091" MODIFIED="1711336320400" TEXT="ist das auch praktisch machbar?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1710977238360" ID="ID_1614727391" MODIFIED="1710977265505" TEXT="sehr wohl — genau dafür wurde std::string_view eingeführt">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -113042,12 +113045,12 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1711330603683" ID="ID_296531042" MODIFIED="1711330671193" TEXT="brauche zumindest elementares MapS-Binding">
|
||||
<arrowlink COLOR="#b54881" DESTINATION="ID_702455242" ENDARROW="Default" ENDINCLINATION="-279;-482;" ID="Arrow_ID_1670013683" STARTARROW="None" STARTINCLINATION="-121;7;"/>
|
||||
<node BACKGROUND_COLOR="#dfe0aa" COLOR="#0f4569" CREATED="1711330603683" ID="ID_296531042" MODIFIED="1711335981711" TEXT="brauche zumindest elementares MapS-Binding">
|
||||
<arrowlink COLOR="#b54881" DESTINATION="ID_702455242" ENDARROW="Default" ENDINCLINATION="-279;-482;" ID="Arrow_ID_1670013683" STARTARROW="None" STARTINCLINATION="-190;11;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1710978786840" ID="ID_647695428" MODIFIED="1711046694334" TEXT="brauche einen »Cursor« für aktuelle Action">
|
||||
<node COLOR="#338800" CREATED="1710978786840" FOLDED="true" ID="ID_647695428" MODIFIED="1711046694334" TEXT="brauche einen »Cursor« für aktuelle Action">
|
||||
<linktarget COLOR="#7e4239" DESTINATION="ID_647695428" ENDARROW="Default" ENDINCLINATION="-527;-17;" ID="Arrow_ID_660745747" SOURCE="ID_1755236197" STARTARROW="None" STARTINCLINATION="211;249;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1710978847288" ID="ID_1081341248" MODIFIED="1711046705927" TEXT="hatte ich sowas nicht schon mal?">
|
||||
|
|
@ -113383,32 +113386,39 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1710901479260" ID="ID_1390433932" MODIFIED="1710901499394" TEXT="Action::instantiate() auf Basis des Data-Bindings implementieren">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710901502001" ID="ID_1137356719" MODIFIED="1710901531737" TEXT="hier wird der Kern der Template-Interpretation ausformuliert">
|
||||
<node COLOR="#338800" CREATED="1710901479260" ID="ID_1390433932" MODIFIED="1711335865662" TEXT="Action::instantiate() auf Basis des Data-Bindings implementieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#0b0099" CREATED="1710901502001" ID="ID_1137356719" MODIFIED="1711335774377" TEXT="hier wird der Kern der Template-Interpretation ausformuliert">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1711335881046" ID="ID_1520038773" MODIFIED="1711335901030" TEXT="delegiert jedoch an die InstanceCore"/>
|
||||
<node CREATED="1711335902010" ID="ID_312181517" MODIFIED="1711335911773" TEXT="diese delegiert an Action::instantiate()"/>
|
||||
<node CREATED="1711335915232" ID="ID_408565908" MODIFIED="1711335940297" TEXT="dieses wiederum stützt sich auf das Data-Binding ab"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711048651321" ID="ID_1379071153" MODIFIED="1711048709052" TEXT="strebe an, die Handhabung von Binding und Context in der InstanzCore zu abstrahieren">
|
||||
<node COLOR="#435e98" CREATED="1711048651321" ID="ID_1379071153" MODIFIED="1711335743498" TEXT="die Handhabung von Binding und Context sind in der InstanzCore zu abstrahiert">
|
||||
<linktarget COLOR="#3c5ab7" DESTINATION="ID_1379071153" ENDARROW="Default" ENDINCLINATION="175;0;" ID="Arrow_ID_1882777047" SOURCE="ID_589689453" STARTARROW="None" STARTINCLINATION="18;-7;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1710971037326" ID="ID_775342057" MODIFIED="1711047828238" TEXT="einfachster Fall: ein konstantes Segment (code TEXT)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1711047795099" ID="ID_1376260812" MODIFIED="1711047819540" TEXT="wichtigster Standardfall: einfacher Platzhalter (code KEY)">
|
||||
<node CREATED="1711047837701" ID="ID_614470133" LINK="#ID_1077539392" MODIFIED="1711048073966" TEXT="Zugriff über die Abstraktion der DataSrc"/>
|
||||
<node CREATED="1711047969028" ID="ID_589689453" MODIFIED="1711048716087" TEXT="DataSrc.contains(key), DataSrc.retrieveContent(key), DataSrc.handleMiss(key)">
|
||||
<node CREATED="1711047969028" ID="ID_589689453" MODIFIED="1711335846248" TEXT="DataSrc.contains(key), DataSrc.retrieveContent(key), ...">
|
||||
<arrowlink COLOR="#3c5ab7" DESTINATION="ID_1379071153" ENDARROW="Default" ENDINCLINATION="175;0;" ID="Arrow_ID_1882777047" STARTARROW="None" STARTINCLINATION="18;-7;"/>
|
||||
</node>
|
||||
<node CREATED="1711048020006" ID="ID_749375229" MODIFIED="1711048057908" TEXT="Map-Binding grundsätzlich einrichten"/>
|
||||
<node CREATED="1711048031035" ID="ID_1724296194" MODIFIED="1711048039782" TEXT="Hello-cruel-World-Test muß laufen"/>
|
||||
<node COLOR="#338800" CREATED="1711048020006" ID="ID_749375229" MODIFIED="1711335801184" TEXT="Map-Binding grundsätzlich einrichten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1711048031035" ID="ID_1724296194" MODIFIED="1711335798503" TEXT="Hello-cruel-World-Test muß laufen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793352301" ID="ID_1691061928" MODIFIED="1710793355254" TEXT="Bindings">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793356309" ID="ID_618241969" MODIFIED="1710793358557" TEXT="Map">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1710793352301" ID="ID_1691061928" MODIFIED="1711335701805" TEXT="Bindings">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1710793356309" ID="ID_618241969" MODIFIED="1711335699916" TEXT="Map">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1710804031539" ID="ID_1692068622" MODIFIED="1710879172991" TEXT="der Inhaltstyp wird via util::toString() zugegriffen"/>
|
||||
<node CREATED="1710804062496" ID="ID_377899149" MODIFIED="1710804093937" TEXT="DataSrc ist ein generischer Wrapper um die Map"/>
|
||||
<node CREATED="1710804167972" ID="ID_200600045" MODIFIED="1710804186992" TEXT="der Iterator ist eine String-View (ein String-Range)"/>
|
||||
|
|
@ -113428,27 +113438,27 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1710804264759" ID="ID_1288259029" MODIFIED="1710804281745" TEXT="das bedeutet: die Daten müssen eben dementsprechend strukturiert sein"/>
|
||||
<node CREATED="1710804473275" ID="ID_1177047190" MODIFIED="1710804522912" TEXT="ein verschachtelter Kontext muß Keys referenzieren, die anderweitig in der Map vorhanden sind"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711330640991" ID="ID_702455242" MODIFIED="1711330676226" TEXT="Implementierung">
|
||||
<linktarget COLOR="#b54881" DESTINATION="ID_702455242" ENDARROW="Default" ENDINCLINATION="-279;-482;" ID="Arrow_ID_1670013683" SOURCE="ID_296531042" STARTARROW="None" STARTINCLINATION="-121;7;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1711330640991" ID="ID_702455242" MODIFIED="1711335956808" TEXT="Implementierung">
|
||||
<linktarget COLOR="#b54881" DESTINATION="ID_702455242" ENDARROW="Default" ENDINCLINATION="-279;-482;" ID="Arrow_ID_1670013683" SOURCE="ID_296531042" STARTARROW="None" STARTINCLINATION="-190;11;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1711330691216" ID="ID_650431219" MODIFIED="1711331581249" TEXT="hält einen Pointer auf die zugrundeliegende Map">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711331357462" ID="ID_1912581954" MODIFIED="1711331578929" TEXT="merkt sich ein Key-Präfix zur Dekoration">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711331495228" ID="ID_745563840" MODIFIED="1711331561532" TEXT="es wird nur beim Zugriff immer das Präfix vor den jeweils gegebenen Key geklebt">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1711331357462" ID="ID_1912581954" MODIFIED="1711335634739" TEXT="merkt sich ein Key-Präfix zur Dekoration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1711331495228" ID="ID_745563840" MODIFIED="1711335637950" TEXT="es wird nur beim Zugriff immer das Präfix vor den jeweils gegebenen Key geklebt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1711331371556" ID="ID_909634689" MODIFIED="1711331568956" TEXT="hier wird nicht verschachtelt">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711331380819" ID="ID_853300536" MODIFIED="1711331563787" TEXT="es gibt dann nur einen Fallback auf die undekorierte Map">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1711331380819" ID="ID_853300536" MODIFIED="1711335639381" TEXT="es gibt dann nur einen Fallback auf die undekorierte Map">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711331407216" ID="ID_1304513851" MODIFIED="1711331577097" TEXT="die Iteration wertet eine Liste von Daten-Key-Elementen aus">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1711331407216" ID="ID_1304513851" MODIFIED="1711335641953" TEXT="die Iteration wertet eine Liste von Daten-Key-Elementen aus">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1711331431068" ID="ID_748427184" MODIFIED="1711333491631" TEXT="aus jedem wird ein Präfix gebildet">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
|
|
@ -113461,6 +113471,10 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1711331469327" ID="ID_1328551681" MODIFIED="1711331478314" TEXT="Ebene-2 : Keys zusammensetzen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1711335652300" ID="ID_1349211278" MODIFIED="1711335681237" TEXT="Test">
|
||||
<arrowlink COLOR="#d00f57" DESTINATION="ID_1713123157" ENDARROW="Default" ENDINCLINATION="104;-13;" ID="Arrow_ID_413173793" STARTARROW="None" STARTINCLINATION="-338;-54;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710804833930" ID="ID_1766619477" MODIFIED="1710804839987" TEXT="Test-Binding">
|
||||
|
|
@ -113513,6 +113527,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793522467" ID="ID_1713123157" MODIFIED="1710793546412" TEXT="verify_Map_binding">
|
||||
<linktarget COLOR="#d00f57" DESTINATION="ID_1713123157" ENDARROW="Default" ENDINCLINATION="104;-13;" ID="Arrow_ID_413173793" SOURCE="ID_1349211278" STARTARROW="None" STARTINCLINATION="-338;-54;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710793547451" ID="ID_778488140" MODIFIED="1710793552697" TEXT="verify_ETD_binding">
|
||||
|
|
|
|||
Loading…
Reference in a new issue