solution for access to "tree mutator building closure"
- default recommendation is to implement DiffMutable interface - ability to pick up similar non-virtual method on target - for anything else client shall provide free function mutatorBinding(subject) PERSONAL NOTE: this is the first commit after an extended leave, where I was in hospital to get an abdominal cancer removed. Right now it looks like surgery was successful.
This commit is contained in:
parent
5744244f73
commit
4a2340ca5e
4 changed files with 180 additions and 95 deletions
|
|
@ -82,22 +82,77 @@ namespace diff{
|
|||
|
||||
/* ======= derive a TreeMutator binding for a given opaque data structure ======= */
|
||||
|
||||
|
||||
using meta::enable_if;
|
||||
using meta::Yes_t;
|
||||
using meta::No_t;
|
||||
using std::is_same;
|
||||
using std::__not_;
|
||||
using std::declval;
|
||||
|
||||
/**
|
||||
* helper to detect presence of a
|
||||
* TreeMutator builder function
|
||||
*/
|
||||
template<typename T>
|
||||
class exposes_MutatorBuilder
|
||||
{
|
||||
|
||||
META_DETECT_FUNCTION (void, buildMutator, (TreeMutator::Handle));
|
||||
|
||||
public:
|
||||
enum{ value = HasFunSig_buildMutator<T>::value
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
template<class TAR, typename SEL =void>
|
||||
struct MutatorBinding
|
||||
{
|
||||
///////////////TODO
|
||||
|
||||
operator DiffMutable& ()
|
||||
{
|
||||
UNIMPLEMENTED ("how to build and pass the closure safely");
|
||||
}
|
||||
static_assert (!sizeof(TAR), "MutatorBinding: Unable to access or build a TreeMutator for this target data.");
|
||||
};
|
||||
|
||||
template<class TAR>
|
||||
DiffMutable&
|
||||
mutatorBinding (TAR& subject)
|
||||
struct MutatorBinding<TAR, enable_if<is_same<TAR, DiffMutable>>>
|
||||
{
|
||||
using Ret = DiffMutable&;
|
||||
};
|
||||
|
||||
template<class TAR>
|
||||
struct MutatorBinding<TAR, enable_if<exposes_MutatorBuilder<TAR>>>
|
||||
{
|
||||
class Wrapper
|
||||
: public DiffMutable
|
||||
{
|
||||
TAR& subject_;
|
||||
|
||||
/** implement the TreeMutator interface,
|
||||
* by forwarding to a known implementation function
|
||||
* on the wrapped target data type */
|
||||
virtual void
|
||||
buildMutator (TreeMutator::Handle handle)
|
||||
{
|
||||
subject_.buildMutator (handle);
|
||||
}
|
||||
|
||||
public:
|
||||
Wrapper(TAR& subj)
|
||||
: subject_(subj)
|
||||
{ }
|
||||
};
|
||||
|
||||
using Ret = Wrapper;
|
||||
};
|
||||
|
||||
template<class TAR>
|
||||
auto
|
||||
mutatorBinding (TAR& subject) -> typename MutatorBinding<TAR>::Ret
|
||||
{
|
||||
UNIMPLEMENTED ("how to detect, create and pass a suitable mutator building closure");
|
||||
using Wrapper = typename MutatorBinding<TAR>::Ret;
|
||||
return Wrapper{subject};
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ namespace lib {
|
|||
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* helper to detect presence of a function
|
||||
* to support clone operations
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ namespace test{
|
|||
run (Arg)
|
||||
{
|
||||
Opaque subject;
|
||||
DiffMutable& target = mutatorBinding (subject);
|
||||
auto target = mutatorBinding (subject);
|
||||
DiffApplicator<DiffMutable> application(target);
|
||||
//
|
||||
// TODO verify results
|
||||
|
|
|
|||
|
|
@ -1144,8 +1144,7 @@
|
|||
Wichtigster solcher Fall ist die <b>Bindung auf Objekt-Felder</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#e5500c" CREATED="1461946693701" ID="ID_36720859" MODIFIED="1461946713634" STYLE="fork" TEXT="meta-Operationen">
|
||||
|
|
@ -2885,8 +2884,7 @@
|
|||
"nicht nutzen" : meint ignorieren und verwerfen der Information
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1461889550072" ID="ID_48030760" MODIFIED="1461889558442" TEXT="dürfen nur Zustands-Änderungen bewirken"/>
|
||||
<node CREATED="1461889558983" ID="ID_1489246908" MODIFIED="1461889796278" TEXT="welche keinen Einfluß auf nachfolgende Diffs haben">
|
||||
|
|
@ -3163,8 +3161,7 @@
|
|||
thus always available
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1455927425726" ID="ID_950488526" MODIFIED="1464212647870" TEXT="skipSrc">
|
||||
|
|
@ -3232,8 +3229,7 @@
|
|||
Somit könnten sofort Zuweisungen als Nächstes passieren
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1463675872239" ID="ID_467354174" MODIFIED="1463675882809" TEXT="ist sehr sinnvoll"/>
|
||||
<node CREATED="1463675883853" ID="ID_178701147" MODIFIED="1464212598924" TEXT="könnte sogar Standardfall sein">
|
||||
|
|
@ -3287,8 +3283,7 @@
|
|||
das heißt, es findet <b>keine Verifikation</b> statt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1455928193863" ID="ID_579601999" MODIFIED="1461946829159" TEXT="CTOR">
|
||||
|
|
@ -3369,8 +3364,7 @@
|
|||
zumal das erhebliche Statefulness bewirkt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1463687649812" ID="ID_450096384" MODIFIED="1463687655942" TEXT="Ersatz">
|
||||
|
|
@ -3415,8 +3409,7 @@
|
|||
denn der Setter nimmt eine GenNode
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -3454,8 +3447,7 @@
|
|||
<b>injectNew</b> tolerieren
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1463690238314" ID="ID_1366435072" MODIFIED="1463690270664" TEXT="eigentlich redundant">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -3467,8 +3459,7 @@
|
|||
....man könnte genausogut auch beim ersten Mal zuweisen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1463690487032" ID="ID_1618528789" MODIFIED="1463690595034" TEXT="Aber: isomorph zu GenNode">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -3491,8 +3482,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -3551,8 +3541,7 @@
|
|||
damit wir nicht in die ganzen Ungewissheiten der widening conversions laufen!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -3577,8 +3566,7 @@
|
|||
d.h. der Attributwert hat Wertsemantik und wird einfach zugewiesen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1463691804696" ID="ID_1039735883" MODIFIED="1463692035179" TEXT="Mutator">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -3590,8 +3578,7 @@
|
|||
...d.h. der Attributwert ist ein Objekt und damit ein nested Scope
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1463691807824" ID="ID_175488317" MODIFIED="1463691814860" TEXT="keine Mischformen">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -3606,8 +3593,7 @@
|
|||
Problem: <i>immutable values</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node CREATED="1463692505987" ID="ID_113919280" MODIFIED="1463692515040" TEXT="wirklich ein Problem?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
|
|
@ -3634,8 +3620,7 @@
|
|||
das alles passiert dann <i>im</i> Lambda
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1463695640231" ID="ID_176647136" MODIFIED="1463695645090" TEXT="und ist somit nicht unser Problem"/>
|
||||
</node>
|
||||
|
|
@ -3650,8 +3635,7 @@
|
|||
Dilemma: <i>defaultable fields</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1463849536789" ID="ID_864537854" MODIFIED="1463849542928" TEXT="ich möchte sie unterstützen">
|
||||
<node CREATED="1463849545196" ID="ID_1187170275" MODIFIED="1463849547316" TEXT="warum">
|
||||
|
|
@ -3680,8 +3664,7 @@
|
|||
muß dies als INS geschehen, denn eine Zuweisung an nicht aufgeführtes Element ist verboten
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1463849716869" ID="ID_712482848" MODIFIED="1463849742347" TEXT="in der Bindung auf ein Objekt habe ich aber keine Attribut-Menge">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
|
|
@ -3699,8 +3682,7 @@
|
|||
zu erkennen, wenn wir fertig sind
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1463849986345" ID="ID_1305704801" MODIFIED="1463849990636" TEXT="genauer...">
|
||||
<node CREATED="1463850017285" ID="ID_656883117" MODIFIED="1463850033879" TEXT="wenn ein feld zwar gebunden ist"/>
|
||||
|
|
@ -3720,8 +3702,7 @@
|
|||
Aber es ist kein optional field, d.h. wir haben keine Flag, die es als "defaulted" kennzeichnet
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1463850138853" ID="ID_1262990387" MODIFIED="1463931531545" TEXT="also ist das Grundproblem">
|
||||
|
|
@ -3738,8 +3719,7 @@
|
|||
Lösung: <b>alles immer explizit</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -3798,8 +3778,7 @@
|
|||
Also dann besser klar und ehrlich!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -3828,8 +3807,7 @@
|
|||
immer noch die Möglichkeit, die Attribute explizit als Sammlung darzustellen.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -3843,8 +3821,7 @@
|
|||
auf die <i>empty</i>-Prüfung am Ende verzichten
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#f36478" DESTINATION="ID_1554206938" ENDARROW="Default" ENDINCLINATION="181;0;" ID="Arrow_ID_389060908" STARTARROW="None" STARTINCLINATION="181;0;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
|
|
@ -3866,8 +3843,7 @@
|
|||
bevor ein anderes Verifikations-Prädikat angewendet wird.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#f36478" DESTINATION="ID_1554206938" ENDARROW="Default" ENDINCLINATION="181;0;" ID="Arrow_ID_389060908" SOURCE="ID_540672245" STARTARROW="None" STARTINCLINATION="181;0;"/>
|
||||
</node>
|
||||
<node CREATED="1463937980222" ID="ID_1669470430" MODIFIED="1463937986216" TEXT="kann nicht mehr negativ geprüft werden"/>
|
||||
|
|
@ -3937,8 +3913,7 @@
|
|||
Das ist hier tatsächlich viel schlechter, als das bischen lineare Suche
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -3958,8 +3933,7 @@
|
|||
für den ich damals gezwungen war, die GenNode zu erfinden :)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#338800" CREATED="1464227273572" ID="ID_1669070695" MODIFIED="1465428151809" TEXT="TODO: alten Testfall anpassen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -4013,8 +3987,7 @@
|
|||
gleiches Argument...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1464397039834" ID="ID_1349501863" MODIFIED="1464397115277" TEXT="verwendet Symbol-Datentyp">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -4029,8 +4002,7 @@
|
|||
Dann kann man sich immer noch überlegen, ob man dann <i>an dieser Stelle</i> bereinigt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -4089,8 +4061,7 @@
|
|||
Keine klare Linie
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node CREATED="1464483601318" ID="ID_1275035047" MODIFIED="1464483610226" TEXT="gibt es überhaupt eine Alternative">
|
||||
|
|
@ -4171,8 +4142,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1465139405203" ID="ID_103737978" MODIFIED="1465139492329" TEXT="...hey, der Typ ist implizit klar! es ist immer Rec">
|
||||
|
|
@ -4191,8 +4161,7 @@
|
|||
also repräsentiert als Rec<GenNode>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -4244,12 +4213,13 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1461882151581" HGAP="29" ID="ID_710057839" MODIFIED="1461882163201" TEXT="Selector integrieren" VSHIFT="23">
|
||||
<node CREATED="1461967533959" ID="ID_1476036864" MODIFIED="1461967727977" TEXT="korrekte logische Verkettung"/>
|
||||
<node CREATED="1461967541166" ID="ID_1033772766" MODIFIED="1461967566044" TEXT="muß von jeder Primitive unterstützt werden">
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1461882151581" HGAP="29" ID="ID_710057839" MODIFIED="1468761946716" TEXT="Selector integrieren" VSHIFT="23">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1461967533959" ID="ID_1476036864" MODIFIED="1468761946715" TEXT="korrekte logische Verkettung"/>
|
||||
<node CREATED="1461967541166" ID="ID_1033772766" MODIFIED="1468761946715" TEXT="muß von jeder Primitive unterstützt werden">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1461967571042" ID="ID_186074377" MODIFIED="1461967715399">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1461967571042" ID="ID_186074377" MODIFIED="1468761946715">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -4261,13 +4231,13 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1461967744747" ID="ID_1012577830" MODIFIED="1461967750654" TEXT="Diff setzt totale Ordnung voraus"/>
|
||||
<node CREATED="1461967765080" ID="ID_1011855147" MODIFIED="1461967787729" TEXT="verletzt durch »onion-layer«"/>
|
||||
<node CREATED="1461967839110" ID="ID_571996411" MODIFIED="1461967845290" TEXT="Relevanz">
|
||||
<node CREATED="1461967744747" ID="ID_1012577830" MODIFIED="1468761946715" TEXT="Diff setzt totale Ordnung voraus"/>
|
||||
<node CREATED="1461967765080" ID="ID_1011855147" MODIFIED="1468761946715" TEXT="verletzt durch »onion-layer«"/>
|
||||
<node CREATED="1461967839110" ID="ID_571996411" MODIFIED="1468761946715" TEXT="Relevanz">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1461967850797" ID="ID_1981205783" MODIFIED="1461967919503" TEXT="bei Einzelschritt irrelevant"/>
|
||||
<node CREATED="1461967876521" ID="ID_1804785019" MODIFIED="1461967946372" TEXT="zwingend bei "AFTER"-Verb">
|
||||
<node CREATED="1461967962814" ID="ID_1667097505" MODIFIED="1461968108993" TEXT="weil das Zwischenschritte überspringt">
|
||||
<node CREATED="1461967850797" ID="ID_1981205783" MODIFIED="1468761946715" TEXT="bei Einzelschritt irrelevant"/>
|
||||
<node CREATED="1461967876521" ID="ID_1804785019" MODIFIED="1468761946715" TEXT="zwingend bei "AFTER"-Verb">
|
||||
<node CREATED="1461967962814" ID="ID_1667097505" MODIFIED="1468761946715" TEXT="weil das Zwischenschritte überspringt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -4291,8 +4261,8 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1461967992042" ID="ID_9552950" MODIFIED="1461968004228" TEXT="nur ein Ausweg..."/>
|
||||
<node CREATED="1461968004720" ID="ID_1333404241" MODIFIED="1461968229550" TEXT="Ordnung der onion-layer verbindlich machen">
|
||||
<node CREATED="1461967992042" ID="ID_9552950" MODIFIED="1468761946715" TEXT="nur ein Ausweg..."/>
|
||||
<node CREATED="1461968004720" ID="ID_1333404241" MODIFIED="1468761946715" TEXT="Ordnung der onion-layer verbindlich machen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -4335,8 +4305,7 @@
|
|||
auf Basis des neu geschaffenen <b>TreeMutator</b>s
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node CREATED="1465664755169" ID="ID_132124444" MODIFIED="1465664761884" TEXT="Modus der Anwendung">
|
||||
<node CREATED="1465664762944" ID="ID_1254081914" MODIFIED="1465665479208" TEXT="DiffApplicator<TreeMutator>">
|
||||
<icon BUILTIN="help"/>
|
||||
|
|
@ -4362,8 +4331,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#994062" DESTINATION="ID_1139754084" ENDARROW="Default" ENDINCLINATION="1028;0;" ID="Arrow_ID_10673972" STARTARROW="None" STARTINCLINATION="978;42;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
|
|
@ -4407,6 +4375,71 @@
|
|||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1465666541419" ID="ID_1090547868" MODIFIED="1465666552293" TEXT="entweder ein festes Interface"/>
|
||||
<node CREATED="1465666552842" ID="ID_1518882587" MODIFIED="1465666574594" TEXT="oder über Metaprogrammierung / Spezialisierung"/>
|
||||
<node CREATED="1468761997202" ID="ID_1870085622" MODIFIED="1468762006291" TEXT="kombinierte Lösung">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1468762009304" ID="ID_1554371522" MODIFIED="1468762018314" TEXT="Interface DiffMutable"/>
|
||||
<node CREATED="1468762031701" ID="ID_48737788" MODIFIED="1468762250072" TEXT="Meta-Adapter">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1468762052858" ID="ID_494010261" MODIFIED="1468762066764" TEXT="synthetisiert dieses Interface"/>
|
||||
<node CREATED="1468762067383" ID="ID_484867304" MODIFIED="1468762075059" TEXT="erkennt passende Methoden"/>
|
||||
<node CREATED="1468762075671" ID="ID_52899390" MODIFIED="1468762081293" TEXT="Problem: Storage">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1468762092660" ID="ID_361660092" MODIFIED="1468762097264" TEXT="Adapter oder Lambda"/>
|
||||
<node CREATED="1468762097684" ID="ID_1049198962" MODIFIED="1468762107374" TEXT="muß länger leben als der Adapter"/>
|
||||
<node CREATED="1468762118913" ID="ID_1064755787" MODIFIED="1468762128867" TEXT="Lösung: Wert / Reftyp per Spezialisierung"/>
|
||||
<node CREATED="1468762138318" ID="ID_1261183393" MODIFIED="1468762243340" TEXT="Restrisiko bleibt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
....daß ein unbedarfter client diesen Trick übershieht
|
||||
</p>
|
||||
<p>
|
||||
und daher den Rückgabewert wegwirft.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Argument: we soweit einsteigt, die Metaprogramming-Lösung zu nutzen,
|
||||
</p>
|
||||
<p>
|
||||
sollte auch intelligent genug sein, die API-Doc zu lesen.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Standard == Interface DiffMutable implementieren
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1469121877371" HGAP="38" ID="ID_1718572301" MODIFIED="1469121945510" TEXT="freie funktion" VSHIFT="16">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1469121882782" ID="ID_1873664189" MODIFIED="1469121933463" TEXT="keine Spezialisierung notwendig">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1469121890060" ID="ID_985582322" MODIFIED="1469121930007">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Client soll direkt <b>mutatorBinding</b> bieten
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -4427,8 +4460,7 @@
|
|||
TreeMutator-<i>Binding</i> muß opaque bleiben
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1465855561877" ID="ID_1466552960" MODIFIED="1465855592311">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -4440,8 +4472,7 @@
|
|||
Buffer-Größen-Management <i>vorsehen</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node CREATED="1465855596992" ID="ID_1925577989" MODIFIED="1465855605363" TEXT="passiert im Scope des Ctors"/>
|
||||
<node CREATED="1465855605879" ID="ID_961922886" MODIFIED="1465855611850" TEXT="bzw. im Scope des MUT-Verbs"/>
|
||||
<node CREATED="1465855641898" ID="ID_1420998207" MODIFIED="1465855731999" TEXT="Heuristik + Versuch&Irrtum">
|
||||
|
|
@ -4462,8 +4493,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1465855653265" ID="ID_1093267368" MODIFIED="1465855739025" TEXT="konfigurieren und lernen"/>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue