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:
parent
c658512d7b
commit
e95f729ad0
3 changed files with 37 additions and 13 deletions
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -97133,13 +97133,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
In die eigentliche Auswertungsfunktion kann man eine »trojanische Funktion« installieren, die etwas völlig anderes macht, nämlich die Initialisierung. Danach ü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ätztlich ist std::function bereits ein Container">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -97273,7 +97272,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1700778751948" ID="ID_306020657" MODIFIED="1700778847979" TEXT="Prinzip: Detail-Wissen ü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ü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:   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ß zu Beginn »proben«">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
|
|
@ -97313,8 +97312,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1700786494226" ID="ID_990128277" MODIFIED="1700786508492" TEXT="generisch das Verhältnis zur std::function ermitteln"/>
|
||||
<node CREATED="1700786514967" ID="ID_1504854205" MODIFIED="1700786531452" TEXT="ebenso das Verhä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:   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:   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:   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> mißbraucht</i>
|
||||
InPlaceBuffer<i> mißbraucht</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
Loading…
Reference in a new issue