Chain-Load: verify simple usage of LazyInit

...turns out I'd used the wrong Opaque buffer component;
...but other than that, the freaky mechanism seems to work
This commit is contained in:
Fischlurch 2023-11-25 01:09:37 +01:00
parent c658512d7b
commit e95f729ad0
3 changed files with 37 additions and 13 deletions

View file

@ -206,7 +206,7 @@ namespace lib {
using DelegateType = std::function<std::function<SIG>&(RawAddr)>;
using PlaceholderType = DelegateType<void(void)>;
using HeapStorage = OpaqueHolder<PlaceholderType>;
using HeapStorage = InPlaceBuffer<PlaceholderType>;
using PendingInit = std::shared_ptr<HeapStorage>;
PendingInit pendingInit_;

View file

@ -297,6 +297,30 @@ namespace test{
void
verify_lazyInitialisation()
{
using Fun = std::function<float(int)>;
using Lazy = LazyInit<Fun>;
bool init{false};
uint invoked{0};
Lazy funny{funny, [&](Lazy* self)
{
Fun& thisFun = static_cast<Fun&> (*self);
thisFun = [&invoked](int num)
{
++invoked;
return num * 0.555f;
};
init = true;
}};
CHECK (not invoked);
CHECK (not init);
CHECK (funny);
int feed = 1 + rand()%99;
CHECK (feed*0.555f == funny(feed));
CHECK (1 == invoked);
CHECK (init);
}
};

View file

@ -97133,13 +97133,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
In die eigentliche Auswertungsfunktion kann man eine &#187;trojanische Funktion&#171; installieren, die etwas v&#246;llig anderes macht, n&#228;mlich die Initialisierung. Danach &#252;berschreibt sie sich selbst mit der fertig gebundenen Funktion
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1700772657793" ID="ID_577281261" MODIFIED="1700772670690" TEXT="init-Hook dort ablegen"/>
<node CREATED="1700772679653" ID="ID_345439582" MODIFIED="1700772699597" TEXT="ersetzt sich selbst"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700772812268" ID="ID_1143957846" MODIFIED="1700772830131" TEXT="Aufbewahren belieiger Funktionen">
<node COLOR="#435e98" CREATED="1700772812268" ID="ID_1143957846" MODIFIED="1700870804301" TEXT="Aufbewahren belieiger Funktionen">
<icon BUILTIN="info"/>
<node CREATED="1700773163605" ID="ID_1780777902" MODIFIED="1700773325986" TEXT="grunds&#xe4;tztlich ist std::function bereits ein Container">
<richcontent TYPE="NOTE"><html>
@ -97273,7 +97272,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1700778751948" ID="ID_306020657" MODIFIED="1700778847979" TEXT="Prinzip: Detail-Wissen &#xfc;ber die Funktion soll im Initialiser eingekapselt bleiben"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700779211570" ID="ID_181212829" MODIFIED="1700779288743" TEXT="sauber als Hilfskomponente aufsetzen">
<node COLOR="#435e98" CREATED="1700779211570" ID="ID_181212829" MODIFIED="1700870784728" TEXT="sauber als Hilfskomponente aufsetzen">
<icon BUILTIN="yes"/>
<node CREATED="1700779233186" ID="ID_155856101" MODIFIED="1700779259708" TEXT="Begr&#xfc;ndung: wird schon wieder Komplex und hat ein paar vergrabene Hunde..."/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1700779263072" ID="ID_1457586572" MODIFIED="1700792011790" TEXT="lib/lazy-init.hpp">
@ -97302,8 +97301,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700786402490" ID="ID_846455233" MODIFIED="1700786418812" TEXT="Trick-Mechanismus zur this-Ermittlung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1700786402490" ID="ID_846455233" MODIFIED="1700870769671" TEXT="Trick-Mechanismus zur this-Ermittlung">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1700786427859" ID="ID_569731992" MODIFIED="1700865640264" TEXT="mu&#xdf; zu Beginn &#xbb;proben&#xab;">
<icon BUILTIN="button_ok"/>
</node>
@ -97313,8 +97312,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1700786494226" ID="ID_990128277" MODIFIED="1700786508492" TEXT="generisch das Verh&#xe4;ltnis zur std::function ermitteln"/>
<node CREATED="1700786514967" ID="ID_1504854205" MODIFIED="1700786531452" TEXT="ebenso das Verh&#xe4;ltnis von der std::function zu *this"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1700794680114" ID="ID_1167943729" MODIFIED="1700795330803" TEXT="Vorraussetzung: Inline-Storage in std::function">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1700794680114" ID="ID_1167943729" MODIFIED="1700870764522" TEXT="Vorraussetzung: Inline-Storage in std::function">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1700794692834" ID="ID_1004006687" MODIFIED="1700794700255" TEXT="Experiment (im Unit-Test)">
<icon BUILTIN="button_ok"/>
</node>
@ -97355,7 +97354,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#e64156" DESTINATION="ID_579721558" ENDARROW="Default" ENDINCLINATION="581;-41;" ID="Arrow_ID_1803799256" STARTARROW="None" STARTINCLINATION="-98;-231;"/>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700795105608" ID="ID_1474010761" MODIFIED="1700795128644" TEXT="bleibt nur der LazyInit-Mix-in selber">
<node COLOR="#435e98" CREATED="1700795105608" ID="ID_1474010761" MODIFIED="1700870759558" TEXT="bleibt nur der LazyInit-Mix-in selber">
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1700795177255" ID="ID_1289910748" MODIFIED="1700856355486" TEXT="an beliebige Kopierbarkeit denken">
<icon BUILTIN="messagebox_warning"/>
@ -97375,7 +97374,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1700846052905" ID="ID_540455340" MODIFIED="1700846056295" TEXT="Initialiser bauen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1700846052905" ID="ID_540455340" MODIFIED="1700870846472" TEXT="Initialiser bauen">
<icon BUILTIN="pencil"/>
<node CREATED="1700846059161" ID="ID_1706977768" MODIFIED="1700846067230" TEXT="puh... das wird komplex">
<icon BUILTIN="smiley-angry"/>
<node CREATED="1700846071031" ID="ID_1148836740" MODIFIED="1700846284270" TEXT="und zwar weil LazyInit strenggenommen den genauen Functor-Typ nicht kennen sollte">
@ -97418,14 +97418,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1700865668069" ID="ID_96300659" MODIFIED="1700865853252" TEXT="Speicherverwaltung">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1700865679180" ID="ID_3672857" MODIFIED="1700865823343">
<node COLOR="#435e98" CREATED="1700865679180" ID="ID_3672857" MODIFIED="1700869506867">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
OpaqueHolder<i>&#160;mi&#223;braucht</i>
InPlaceBuffer<i>&#160;mi&#223;braucht</i>
</p>
</body>
</html>