Invocation: render a processing-spec for a port

This commit is contained in:
Fischlurch 2024-11-03 23:58:25 +01:00
parent 5df93f01fc
commit 53ac1911e7
6 changed files with 57 additions and 31 deletions

View file

@ -118,7 +118,7 @@ namespace lib {
size_t cnt = 1;
const char *pos = literal;
for ( ; cnt <= STRING_MAX_RELEVANT and *pos ; ++cnt, ++pos )
hash_combine(hash, *pos);
hash_combine (hash, *pos);
}
return hash;

View file

@ -70,11 +70,8 @@ namespace engine {
/* === symbolic descriptors === */
string
genProcSpec()
{
return "Lalü";
}
string genProcSpec(); ///< render a descriptor for the operation (without predecessors)
friend bool
operator== (ProcID const& l, ProcID const& r)
@ -87,9 +84,10 @@ namespace engine {
friend bool
operator!= (ProcID const& l, ProcID const& r)
{ return not (l == r); }
friend HashVal hash_value (ProcID const&);
};
HashVal hash_value (ProcID const&);

View file

@ -40,7 +40,11 @@
namespace steam {
namespace engine {
using util::_Fmt;
using util::isnil;
using util::unConst;
using util::contains;
using boost::hash_combine;
namespace { // Details...
@ -62,7 +66,16 @@ namespace engine {
ProcID&
ProcID::describe (StrView nodeSymb, StrView portSpec)
{
auto res = procRegistry.insert (ProcID{"bla","blubb","murks"});
REQUIRE (not isnil (nodeSymb));
REQUIRE (not isnil (portSpec));
REQUIRE (not contains (nodeSymb, ' '));
auto p = portSpec.find('(');
if (p == string::npos)
throw err::Invalid{_Fmt{"Spec for processing operation must contain at least one argument list. "
"Node:%s Spec:%s"}
% nodeSymb % portSpec
};
auto res = procRegistry.insert (ProcID{nodeSymb, portSpec.substr(0,p), portSpec.substr(p)});
return unConst (*res.first);
}
@ -80,9 +93,22 @@ namespace engine {
HashVal
hash_value (ProcID const& procID)
{
return 47; //UNIMPLEMENTED ("ProcID hash");
HashVal hash = boost::hash_value (procID.nodeSymb_);
if (not isnil(procID.portQual_))
hash_combine (hash, procID.portQual_);
hash_combine (hash, procID.argLists_);
return hash;
}
string
ProcID::genProcSpec()
{
return nodeSymb_
+ (isnil(portQual_)? string{} : "."+portQual_)
+ argLists_;
}
string
ProcNodeDiagnostic::getNodeSpec()
@ -104,8 +130,8 @@ namespace engine {
ProcNodeDiagnostic::getPortSpec (uint portIdx)
{
auto& p{n_.wiring_.ports};
return p.size() < portIdx? util::FAILURE_INDICATOR
: p[portIdx].procID.genProcSpec();
return portIdx < p.size()? p[portIdx].procID.genProcSpec()
: util::FAILURE_INDICATOR;
}
HashVal

View file

@ -35,6 +35,7 @@
using util::isnil;
//using std::string;
using util::isSameObject;
namespace steam {
@ -85,6 +86,9 @@ namespace test {
CHECK (watch(n1).leads().empty());
CHECK (watch(n1).ports().size() == 1);
SHOW_EXPR(watch(n1).getPortSpec(0))
CHECK (watch(n1).getPortSpec(0) == "Test:Src.dummyFun(TestFrame)"_expect);
SHOW_EXPR(watch(n1).getPortSpec(1))
CHECK (watch(n1).getPortSpec(1) == ""_expect);
}

View file

@ -42,7 +42,7 @@ namespace test {
} // (End) hidden impl details
const string DUMMY_FUN_ID{"DummyFun"};
const string DUMMY_FUN_ID{"dummyFun(TestFrame)"};

View file

@ -91052,9 +91052,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#4e40b0" DESTINATION="ID_1347337581" ENDARROW="Default" ENDINCLINATION="-14;74;" ID="Arrow_ID_507591051" STARTARROW="None" STARTINCLINATION="-4;-31;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769319538" ID="ID_1257287659" MODIFIED="1730563164682" TEXT="eine reproduzierbare symbolische Aufruf-Spec erheben">
<arrowlink COLOR="#47347f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" STARTARROW="None" STARTINCLINATION="-284;14;"/>
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1728769319538" ID="ID_1257287659" MODIFIED="1730681979010" TEXT="eine reproduzierbare symbolische Aufruf-Spec erheben">
<arrowlink COLOR="#34417f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" STARTARROW="None" STARTINCLINATION="-284;14;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1728771335267" ID="ID_1094389177" MODIFIED="1728771344519" TEXT="insgesamt....">
@ -91381,8 +91381,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1728785803611" ID="ID_1231385520" MODIFIED="1728785816791" TEXT="minimale Verifikationen aufbauen">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728785803611" ID="ID_1231385520" MODIFIED="1730682018715" TEXT="minimale Verifikationen aufbauen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1728785829235" ID="ID_59153641" MODIFIED="1729983001606" TEXT="Zahl der Leads / Ports">
<icon BUILTIN="button_ok"/>
<node CREATED="1728837023895" ID="ID_605946582" MODIFIED="1728837031771" TEXT="auf Connectivity direkt zug&#xe4;nglich"/>
@ -91393,24 +91393,24 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785840998" ID="ID_663732870" MODIFIED="1728785852800" TEXT="Funktions-ID generieren">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1730426912428" ID="ID_1568293923" LINK="#ID_1347337581" MODIFIED="1730426982203" TEXT="tats&#xe4;chlich kann hier einfach der Qualifier aus dem im Turnout durchgereicht werden"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730427234835" ID="ID_1719129337" MODIFIED="1730427243992" TEXT="diese Information mu&#xdf; durchgef&#xe4;delt werden">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1730427251935" ID="ID_162913631" MODIFIED="1730427287787" TEXT="sie mu&#xdf; im Turnout greifbar sein">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1730426912428" ID="ID_1568293923" LINK="#ID_1347337581" MODIFIED="1730682010119" TEXT="tats&#xe4;chlich kann hier einfach die symbolische Spec aus dem im Turnout durchgereicht werden"/>
<node COLOR="#338800" CREATED="1730427234835" ID="ID_1719129337" MODIFIED="1730681997339" TEXT="diese Information mu&#xdf; durchgef&#xe4;delt werden">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1730427251935" ID="ID_162913631" MODIFIED="1730681992054" TEXT="sie mu&#xdf; im Turnout greifbar sein">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1730427274867" ID="ID_1511400718" MODIFIED="1730429566295" TEXT="also durch den WeavingBuilder durchlaufen">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785867907" ID="ID_394739045" MODIFIED="1728785872687" TEXT="Spec generieren">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728785867907" ID="ID_394739045" MODIFIED="1730682037506" TEXT="Spec generieren">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785876033" ID="ID_424140873" MODIFIED="1728785881465" TEXT="Spec der Funktion">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785882504" ID="ID_607531791" MODIFIED="1728785893760" TEXT="Spec aus dem Turnout">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1728785882504" ID="ID_607531791" MODIFIED="1730682058719" TEXT="Spec aus dem Turnout">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1729986405645" ID="ID_1710935234" MODIFIED="1729986440374" TEXT="Spec der umschlie&#xdf;enden ProcNode">
<arrowlink COLOR="#666a8d" DESTINATION="ID_1032840307" ENDARROW="Default" ENDINCLINATION="312;27;" ID="Arrow_ID_1338984517" STARTARROW="None" STARTINCLINATION="158;-13;"/>
@ -91691,8 +91691,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Beschlu&#223;: als <b>string_view</b>&#160;durch den Builder durchreichen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#58858e" DESTINATION="ID_1890920364" ENDARROW="Default" ENDINCLINATION="-645;-1205;" ID="Arrow_ID_1530493323" SOURCE="ID_208428537" STARTARROW="None" STARTINCLINATION="-445;27;"/>
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1730678529981" ID="ID_1467777740" MODIFIED="1730678537808" TEXT="etwas riskant">
@ -91706,14 +91705,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
das hei&#223;t, es handelt sich definitiv nicht um Literal-Strings; zudem wollen wir die Spec ggfs. noch zerlegen und dann in eine Symbol-Table internen; insofern ist std::string_view der naheliegende Ansatz, da wir keine Inline-Storage durch x-fache Builder-Objekte durchschieben wollen, blo&#223; um am Ende doch nur einen Teilstring in die Symboltabelle zu kopieren
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1730510962225" ID="ID_786613770" MODIFIED="1730563164682" TEXT="Metadaten-Zugriff / API">
<linktarget COLOR="#47347f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" SOURCE="ID_1257287659" STARTARROW="None" STARTINCLINATION="-284;14;"/>
<linktarget COLOR="#34417f" DESTINATION="ID_786613770" ENDARROW="Default" ENDINCLINATION="-278;-1402;" ID="Arrow_ID_1689861408" SOURCE="ID_1257287659" STARTARROW="None" STARTINCLINATION="-284;14;"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1730510982342" ID="ID_310976542" MODIFIED="1730510998830" TEXT="Struktur/Modell">
<icon BUILTIN="info"/>