Lib/Diff: prefer the name "emplace" over "build"
...for the operation on a PlantingHandle, which allows to implant a sub type instance into the opaque buffer. * "create" should be used for a constructor invocation * "emplace" takes an existing object and move-constructs
This commit is contained in:
parent
73740a24e3
commit
5aa41accfc
21 changed files with 192 additions and 32 deletions
|
|
@ -514,7 +514,7 @@ namespace diff{
|
||||||
Iter targetElm = target_.locate (spec.idi);
|
Iter targetElm = target_.locate (spec.idi);
|
||||||
if (targetElm)
|
if (targetElm)
|
||||||
{
|
{
|
||||||
targetBuff.create (TreeMutator::build());
|
targetBuff.emplace (TreeMutator::build());
|
||||||
target_.logMutation (*targetElm);
|
target_.logMutation (*targetElm);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ namespace diff{
|
||||||
void
|
void
|
||||||
Record<GenNode>::Mutator::buildMutator (BufferHandle buff)
|
Record<GenNode>::Mutator::buildMutator (BufferHandle buff)
|
||||||
{
|
{
|
||||||
buff.create (
|
buff.emplace (
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (*this));
|
.attach (*this));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -474,7 +474,17 @@ namespace diff{
|
||||||
}
|
}
|
||||||
|
|
||||||
/** locate the designated target element and build a suitable
|
/** locate the designated target element and build a suitable
|
||||||
* sub-mutator for this element into the provided target buffer */
|
* sub-mutator for this element into the provided target buffer.
|
||||||
|
* @remark basically we just delegate the implementation to the lambda
|
||||||
|
* provided as "mutator" `MUT` to the CollectionBinding instance, which
|
||||||
|
* in turn was created by the TreeMutator builder-DSL. However, in practice,
|
||||||
|
* the most relevant implementation will be the _default implementation,_ which
|
||||||
|
* recursively forwards this invocation again to the DiffMutable::buildMutator()
|
||||||
|
* virtual function, which then is implemented on each actual "diff mutable" UI-Element.
|
||||||
|
* This default implementation can be found in tree-mutator-diffmutable-binding.cpp,
|
||||||
|
* within the `struct _DefaultBinding` (at the bottom of the file). Typically the
|
||||||
|
* concrete implementation will invoke `targetBuff.emplant( TreeMutator::build() ...)`
|
||||||
|
* @see stage::timeline::TimelineController::buildMutator (TreeMutator::Handle) */
|
||||||
virtual bool
|
virtual bool
|
||||||
mutateChild (GenNode const& spec, TreeMutator::Handle targetBuff) override
|
mutateChild (GenNode const& spec, TreeMutator::Handle targetBuff) override
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ namespace diff{
|
||||||
bool
|
bool
|
||||||
mutateChild (Elm, Buff buff) override ///< ignore inferiors, yet reproduce yourself
|
mutateChild (Elm, Buff buff) override ///< ignore inferiors, yet reproduce yourself
|
||||||
{
|
{
|
||||||
buff.create (BlackHoleMutation());
|
buff.emplace (BlackHoleMutation());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -703,7 +703,7 @@ namespace lib {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* handle to allow for safe _»remote implantation«_
|
* A handle to allow for safe _»remote implantation«_
|
||||||
* of an unknown subclass into a given opaque InPlaceBuffer,
|
* of an unknown subclass into a given opaque InPlaceBuffer,
|
||||||
* without having to disclose the concrete buffer type or size.
|
* without having to disclose the concrete buffer type or size.
|
||||||
* @remarks this copyable value object is especially geared towards use
|
* @remarks this copyable value object is especially geared towards use
|
||||||
|
|
@ -733,7 +733,7 @@ namespace lib {
|
||||||
|
|
||||||
template<class SUB>
|
template<class SUB>
|
||||||
BA&
|
BA&
|
||||||
create (SUB&& implementation)
|
emplace (SUB&& implementation)
|
||||||
{
|
{
|
||||||
if (sizeof(SUB) > maxSiz_)
|
if (sizeof(SUB) > maxSiz_)
|
||||||
throw error::Fatal("Unable to implant implementation object of size "
|
throw error::Fatal("Unable to implant implementation object of size "
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ namespace ctrl {
|
||||||
void
|
void
|
||||||
buildMutator (lib::diff::TreeMutator::Handle buffer) override
|
buildMutator (lib::diff::TreeMutator::Handle buffer) override
|
||||||
{
|
{
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
);
|
);
|
||||||
UNIMPLEMENTED ("define and implement what need to be reflected from asset::ErrorLog");
|
UNIMPLEMENTED ("define and implement what need to be reflected from asset::ErrorLog");
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ namespace interact {
|
||||||
void
|
void
|
||||||
InteractionDirector::buildMutator (TreeMutator::Handle buffer)
|
InteractionDirector::buildMutator (TreeMutator::Handle buffer)
|
||||||
{
|
{
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection(timelines_)
|
.attach (collection(timelines_)
|
||||||
.isApplicableIf ([&](GenNode const& spec) -> bool
|
.isApplicableIf ([&](GenNode const& spec) -> bool
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace setting {
|
||||||
void
|
void
|
||||||
AssetController::buildMutator (TreeMutator::Handle buffer)
|
AssetController::buildMutator (TreeMutator::Handle buffer)
|
||||||
{
|
{
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
);
|
);
|
||||||
UNIMPLEMENTED ("create a sensible binding between AssetManager in the section and AssetController in the UI");
|
UNIMPLEMENTED ("create a sensible binding between AssetManager in the section and AssetController in the UI");
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ namespace timeline {
|
||||||
using PEffect = unique_ptr<ClipPresenter>;
|
using PEffect = unique_ptr<ClipPresenter>;
|
||||||
using PMarker = unique_ptr<MarkerWidget>;
|
using PMarker = unique_ptr<MarkerWidget>;
|
||||||
|
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection(markers_)
|
.attach (collection(markers_)
|
||||||
.isApplicableIf ([&](GenNode const& spec) -> bool
|
.isApplicableIf ([&](GenNode const& spec) -> bool
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace timeline {
|
||||||
void
|
void
|
||||||
MarkerWidget::buildMutator (TreeMutator::Handle buffer)
|
MarkerWidget::buildMutator (TreeMutator::Handle buffer)
|
||||||
{
|
{
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.change(ATTR_name, [&](string val)
|
.change(ATTR_name, [&](string val)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ namespace timeline {
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED ("what can actually be manipulated on a RulerTrack by diff message?");
|
UNIMPLEMENTED ("what can actually be manipulated on a RulerTrack by diff message?");
|
||||||
|
|
||||||
// buffer.create (
|
// buffer.emplace(
|
||||||
// TreeMutator::build()
|
// TreeMutator::build()
|
||||||
// .change(ATTR_name, [&](string val)
|
// .change(ATTR_name, [&](string val)
|
||||||
// { // »Attribute Setter« : receive a new value for the track name field
|
// { // »Attribute Setter« : receive a new value for the track name field
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ namespace timeline {
|
||||||
using PMarker = unique_ptr<MarkerWidget>;
|
using PMarker = unique_ptr<MarkerWidget>;
|
||||||
auto rootForkID = fork_->getID();
|
auto rootForkID = fork_->getID();
|
||||||
|
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection(markers_)
|
.attach (collection(markers_)
|
||||||
.isApplicableIf ([&](GenNode const& spec) -> bool
|
.isApplicableIf ([&](GenNode const& spec) -> bool
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ namespace timeline {
|
||||||
if (this->isActive())
|
if (this->isActive())
|
||||||
operator*().buildMutator (buffer); // delegate to TimelineController
|
operator*().buildMutator (buffer); // delegate to TimelineController
|
||||||
else // else when no widget exists...
|
else // else when no widget exists...
|
||||||
buffer.create(
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.ignoreAllChanges()); // ...consume and ignore diff
|
.ignoreAllChanges()); // ...consume and ignore diff
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ namespace timeline {
|
||||||
inline void
|
inline void
|
||||||
TrackPresenter::buildMutator (TreeMutator::Handle buffer)
|
TrackPresenter::buildMutator (TreeMutator::Handle buffer)
|
||||||
{
|
{
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection(display_.bindRulers())
|
.attach (collection(display_.bindRulers())
|
||||||
.isApplicableIf ([&](GenNode const& spec) -> bool
|
.isApplicableIf ([&](GenNode const& spec) -> bool
|
||||||
|
|
|
||||||
|
|
@ -201,7 +201,7 @@ namespace test{
|
||||||
void
|
void
|
||||||
buildMutator (TreeMutator::Handle buff)
|
buildMutator (TreeMutator::Handle buff)
|
||||||
{
|
{
|
||||||
buff.create (
|
buff.emplace (
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection(nestedData_)
|
.attach (collection(nestedData_)
|
||||||
.isApplicableIf ([&](GenNode const& spec) -> bool
|
.isApplicableIf ([&](GenNode const& spec) -> bool
|
||||||
|
|
|
||||||
|
|
@ -174,10 +174,10 @@ namespace test{
|
||||||
buildMutator (TreeMutator::Handle buff)
|
buildMutator (TreeMutator::Handle buff)
|
||||||
{
|
{
|
||||||
if (diligent)
|
if (diligent)
|
||||||
buff.create(
|
buff.emplace(
|
||||||
TreeMutator());
|
TreeMutator());
|
||||||
else
|
else
|
||||||
buff.create(
|
buff.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.ignoreAllChanges());
|
.ignoreAllChanges());
|
||||||
}
|
}
|
||||||
|
|
@ -216,7 +216,7 @@ namespace test{
|
||||||
void
|
void
|
||||||
buildMutator (TreeMutator::Handle buff)
|
buildMutator (TreeMutator::Handle buff)
|
||||||
{
|
{
|
||||||
buff.create(
|
buff.emplace (
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.ignoreAllChanges()
|
.ignoreAllChanges()
|
||||||
.change("γ", [&](double val) { loot = val; }));
|
.change("γ", [&](double val) { loot = val; }));
|
||||||
|
|
|
||||||
|
|
@ -158,7 +158,7 @@ namespace test{
|
||||||
void
|
void
|
||||||
buildMutator (TreeMutator::Handle buff) override
|
buildMutator (TreeMutator::Handle buff) override
|
||||||
{
|
{
|
||||||
buff.create (
|
buff.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection (*this)
|
.attach (collection (*this)
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ namespace test{
|
||||||
void
|
void
|
||||||
buildMutator (TreeMutator::Handle buff) override
|
buildMutator (TreeMutator::Handle buff) override
|
||||||
{
|
{
|
||||||
buff.create (
|
buff.emplace (
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection (subject_)
|
.attach (collection (subject_)
|
||||||
.matchElement ([](GenNode const& spec, string const& elm) -> bool
|
.matchElement ([](GenNode const& spec, string const& elm) -> bool
|
||||||
|
|
|
||||||
|
|
@ -551,7 +551,7 @@ namespace test{
|
||||||
{
|
{
|
||||||
// use our "inside knowledge" to get at the nested scope implementation
|
// use our "inside knowledge" to get at the nested scope implementation
|
||||||
VecD& subScope = subScopes[subID];
|
VecD& subScope = subScopes[subID];
|
||||||
buff.create (
|
buff.emplace (
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection(subScope)
|
.attach (collection(subScope)
|
||||||
.constructFrom ([&](GenNode const& spec) -> Data
|
.constructFrom ([&](GenNode const& spec) -> Data
|
||||||
|
|
@ -862,7 +862,7 @@ namespace test{
|
||||||
{
|
{
|
||||||
// NOTE: we use "implementation inside knowledge" regarding the nested scope,
|
// NOTE: we use "implementation inside knowledge" regarding the nested scope,
|
||||||
// which is here represented as TestMutationTarget
|
// which is here represented as TestMutationTarget
|
||||||
buff.create (
|
buff.emplace (
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attachDummy (delta));
|
.attachDummy (delta));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,7 @@ namespace test{
|
||||||
log_.call (this->identify(), "buildMutator");
|
log_.call (this->identify(), "buildMutator");
|
||||||
cout << this->identify() << " <-- DIFF" <<endl;
|
cout << this->identify() << " <-- DIFF" <<endl;
|
||||||
|
|
||||||
buffer.create (
|
buffer.emplace(
|
||||||
TreeMutator::build()
|
TreeMutator::build()
|
||||||
.attach (collection(scope)
|
.attach (collection(scope)
|
||||||
.isApplicableIf ([&](GenNode const& spec) -> bool
|
.isApplicableIf ([&](GenNode const& spec) -> bool
|
||||||
|
|
|
||||||
|
|
@ -32882,11 +32882,19 @@
|
||||||
<node COLOR="#338800" CREATED="1618675384464" ID="ID_381912051" MODIFIED="1618675399330" TEXT="Zustandslogik der Gesten-Erkennung selber">
|
<node COLOR="#338800" CREATED="1618675384464" ID="ID_381912051" MODIFIED="1618675399330" TEXT="Zustandslogik der Gesten-Erkennung selber">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618672711536" ID="ID_1916597982" MODIFIED="1618672719742" TEXT="Verbindung zum Canvas herstellen">
|
<node COLOR="#338800" CREATED="1618672711536" ID="ID_1916597982" MODIFIED="1619881347856" TEXT="Verbindung zum Canvas herstellen">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
|
<node CREATED="1619881349481" ID="ID_1566054765" MODIFIED="1619881362478" TEXT="nutze das CanvasHooked">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618672732077" ID="ID_949915263" MODIFIED="1618672739781" TEXT="Logik zur Positions-Übersetzung">
|
<node COLOR="#435e98" CREATED="1619881363596" ID="ID_120077248" MODIFIED="1619882215112" TEXT="CanvasHook exponiert jetzt DisplayMetric">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="info"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1619881405244" ID="ID_1235657284" MODIFIED="1619881421990" TEXT="das passiert dann aber alles bereits im Subject"/>
|
||||||
|
<node CREATED="1619882166616" ID="ID_1792609740" MODIFIED="1619882178102" TEXT="Subject::gestureOffset(cmd, deltaX, deltaY)"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618672732077" ID="ID_949915263" MODIFIED="1619882205422" TEXT="Logik zur Positions-Übersetzung">
|
||||||
|
<icon BUILTIN="pencil"/>
|
||||||
<node CREATED="1618676950908" ID="ID_69237451" MODIFIED="1618677116146" TEXT="hier deutet sich ein mehrstufiger Ansatz an">
|
<node CREATED="1618676950908" ID="ID_69237451" MODIFIED="1618677116146" TEXT="hier deutet sich ein mehrstufiger Ansatz an">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head>
|
||||||
|
|
@ -32926,8 +32934,13 @@
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618778688276" ID="ID_1895003083" MODIFIED="1618778695704" TEXT="aber überhaupt noch nicht implementiert">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618778688276" ID="ID_1895003083" MODIFIED="1618778695704" TEXT="aber überhaupt noch nicht implementiert">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619104316816" ID="ID_907598549" MODIFIED="1619104329752" TEXT="zu Klären: Rolle und Zugang zum Layout-Manager">
|
<node COLOR="#435e98" CREATED="1619104316816" FOLDED="true" ID="ID_907598549" MODIFIED="1619880556650" TEXT="zu Klären: Rolle und Zugang zum Layout-Manager">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="yes"/>
|
||||||
|
<node CREATED="1619880229221" ID="ID_667002483" MODIFIED="1619880246203" TEXT="der Belang wird von einer eigenen Komponente behandelt"/>
|
||||||
|
<node CREATED="1619880246897" ID="ID_1360417037" MODIFIED="1619880264379" TEXT="diese wird Teil des DisplayManager-Interface"/>
|
||||||
|
<node CREATED="1619880345173" ID="ID_1065721692" MODIFIED="1619880538264" TEXT="später mal: Integration mit ZoomWindow">
|
||||||
|
<arrowlink COLOR="#8e7ba1" DESTINATION="ID_838803024" ENDARROW="Default" ENDINCLINATION="171;760;" ID="Arrow_ID_1707924491" STARTARROW="None" STARTINCLINATION="-1855;126;"/>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619104748998" ID="ID_1862152665" MODIFIED="1619106836504" TEXT="zu Klären: Skala für Screen-Koordinaten und/oder Pixel">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619104748998" ID="ID_1862152665" MODIFIED="1619106836504" TEXT="zu Klären: Skala für Screen-Koordinaten und/oder Pixel">
|
||||||
<arrowlink COLOR="#6084b9" DESTINATION="ID_206049495" ENDARROW="Default" ENDINCLINATION="-1698;230;" ID="Arrow_ID_1554039358" STARTARROW="None" STARTINCLINATION="-5472;269;"/>
|
<arrowlink COLOR="#6084b9" DESTINATION="ID_206049495" ENDARROW="Default" ENDINCLINATION="-1698;230;" ID="Arrow_ID_1554039358" STARTARROW="None" STARTINCLINATION="-5472;269;"/>
|
||||||
|
|
@ -33203,8 +33216,8 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619104345461" ID="ID_414006920" MODIFIED="1619105085361" TEXT="Aufgabe: API">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619104345461" ID="ID_414006920" MODIFIED="1619880189377" TEXT="Aufgabe: API">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="pencil"/>
|
||||||
<node CREATED="1619104353964" ID="ID_1748021574" MODIFIED="1619104378116" TEXT="vorhanden: translateTimeToPixels(TimeValue startTimePoint)"/>
|
<node CREATED="1619104353964" ID="ID_1748021574" MODIFIED="1619104378116" TEXT="vorhanden: translateTimeToPixels(TimeValue startTimePoint)"/>
|
||||||
<node CREATED="1619132261261" ID="ID_1989281789" MODIFIED="1619132284186" TEXT="erst mal nach Bedarf ― aber genau">
|
<node CREATED="1619132261261" ID="ID_1989281789" MODIFIED="1619132284186" TEXT="erst mal nach Bedarf ― aber genau">
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
|
|
@ -33332,6 +33345,142 @@
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618691013997" ID="ID_429908834" MODIFIED="1618691021757" TEXT="Delta an das Subject weitergeben">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618691013997" ID="ID_429908834" MODIFIED="1618691021757" TEXT="Delta an das Subject weitergeben">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619887175393" ID="ID_54981427" MODIFIED="1619887223546" TEXT="Problem: Aufwand für Gesten-Verfolgung">
|
||||||
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
|
<node CREATED="1619887230011" ID="ID_1178141750" MODIFIED="1619887552418" TEXT="Push von low-Level-Events erzeugt Übersetzungsaufwand">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
typischerweise liefern die low-level-Events gerätespezifische Koordinaten ab, und deren Übersetzung in die Modell/Domänenwerte erfordert Hilfsmittel, die man sich mehrstufig beschaffen muß. Da aber die einzelnen Events unverbunden daherkommen, muß die Verarbeitung vereinzelt erfolgen. Und das heißt, man leistet diesen Einrichtungs-Aufwand für jedes einzelne Event; dies geht zu Lasten der »Reaktivität«
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1619887281662" ID="ID_843790040" MODIFIED="1619887627626" TEXT="Spezial-Konventionen blähen das API auf">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...wenn man nun eine fest-vorbereitete Lösung für jeden Fall vorsieht, wird die Schnittstelle bereit, unübersichtlich und könnte im Lauf der Zeit verwuchern. Zudem muß eine komplexe Konvention errichtet werden, wer wann für wen welche Variante aufruft
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1619887333950" ID="ID_1150224022" MODIFIED="1619887725547" TEXT="ein Übersetzungs-Funktor braucht Platz">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Daher erscheint ein Adapter sinnvoll, der jeweils für eine einzelne Gesten-Instanz erzeugt wird. Dies erfordert jedoch Storage, welche ohne großen Overhead bereitgestellt und effizient genutzt sein will
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1619887730416" ID="ID_915000313" MODIFIED="1619887745442" TEXT="Lösung: Subject zu einem Protokoll ausbauen">
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619887769934" ID="ID_15885968" MODIFIED="1619887783910" TEXT="Schnittstelle zum Verdrahten">
|
||||||
|
<icon BUILTIN="hourglass"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619887785265" ID="ID_194430924" MODIFIED="1619887803248" TEXT="ein Adapter für die Gesten-Instanz">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node CREATED="1619887907477" ID="ID_580784250" MODIFIED="1619887914507" TEXT="wird vom Subject konkret bereitgestellt"/>
|
||||||
|
<node CREATED="1619887915592" ID="ID_1016019139" MODIFIED="1619887925546" TEXT="wird in der Storage des Gesten-Controllers abgelegt"/>
|
||||||
|
<node CREATED="1619887926542" ID="ID_234628540" MODIFIED="1619887933409" TEXT="lebt bis zum Ende der Geste"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#990000" CREATED="1619888087712" ID="ID_279012098" MODIFIED="1619903390115" TEXT="Anforderung: Generische Implementierung mit konkretem Typ">
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
|
<node CREATED="1619888991781" ID="ID_1808059433" MODIFIED="1619888994864" TEXT="warum?">
|
||||||
|
<node CREATED="1619888150728" ID="ID_1072043025" MODIFIED="1619888160161" TEXT="yet-another-indirection vermeiden"/>
|
||||||
|
<node CREATED="1619888165743" ID="ID_1820882158" MODIFIED="1619888172801" TEXT="Inlining ermöglichen"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#990000" CREATED="1619889004742" ID="ID_962466680" MODIFIED="1619903372110" TEXT="geht das überhaupt?">
|
||||||
|
<icon BUILTIN="stop-sign"/>
|
||||||
|
<node CREATED="1619893616079" ID="ID_1820351141" MODIFIED="1619894138543" TEXT="ehr nicht....">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...sobald irgendwo eine Abstraktionsbarriere errichtet wird, muß mindestens ein Call indirekt oder virtuell sein....
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
die Abstraktion zwischen Widget und Canvas muß ich erhalten, weil die Timeline-Anzeige noch ziemlich komplex wird
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
sofern der Gesten-Controller mit beliebigen Widgets umgehen soll, gibt es eine weitere Abstraktion
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<icon BUILTIN="smily_bad"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1619903180827" ID="ID_250477630" MODIFIED="1619903245581" TEXT="darüber muß ich wohl (zunächst?) großzügig hinwegsehen"/>
|
||||||
|
<node CREATED="1619903259743" ID="ID_872225515" MODIFIED="1619903353944" TEXT="zu Vieles ist noch nicht klar">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
im Bezug auf die Performance weiß ich nicht, wo die Meßlatte liegt
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
die tatsächlich benötigte Abstraktion kann sich noch als ganz anders herausstellen
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<icon BUILTIN="yes"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1619967216789" ID="ID_1503155358" MODIFIED="1619967554656" TEXT="aber an der Idee mit dem Adapter halte ich fest...">
|
||||||
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
<node CREATED="1619967266842" ID="ID_1478677945" MODIFIED="1619967373917">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...die konkrete Interpretation der Mausbewegung
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1619967375039" ID="ID_1955578195" MODIFIED="1619967379379" TEXT="...aus dem Gesten-Controller herauszuhalten"/>
|
||||||
|
<node CREATED="1619967252543" ID="ID_630081269" MODIFIED="1619967547078" TEXT="ich sehe keinen anderen Weg....">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...sonst würde entweder das Subject selber ad hoc etwas bereitstellen müssen und dafür zusätzliche Storage brauchen (<b>Hebel</b>, es gibt sehr viele Subjekte!), oder das Interface "Subject" würde löchrigt und zu einer Kodifizierung von Einzelfällen. Die Lösung mit dem Adapter stattdessen fällt unter das Prinzip <i>Inversion of Control</i>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1619972768498" ID="ID_1614732760" MODIFIED="1619972785748" TEXT="das bedeutet: opaque buffer verwenden">
|
||||||
|
<node CREATED="1619972787360" ID="ID_82004044" MODIFIED="1619972793139" TEXT="PlantingHandle">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
<node COLOR="#338800" CREATED="1619972797494" ID="ID_1468885512" MODIFIED="1619972821488" TEXT="nebenbei: Operation "create" → "emplace"">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618691023427" ID="ID_1396949384" MODIFIED="1618691041225" TEXT="im Subject in Modell-Koordinaten transformieren">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1618691023427" ID="ID_1396949384" MODIFIED="1618691041225" TEXT="im Subject in Modell-Koordinaten transformieren">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
|
@ -33437,6 +33586,7 @@
|
||||||
<node CREATED="1541858529489" ID="ID_838803024" MODIFIED="1557498707233" TEXT="ZoomWindow">
|
<node CREATED="1541858529489" ID="ID_838803024" MODIFIED="1557498707233" TEXT="ZoomWindow">
|
||||||
<linktarget COLOR="#5b5ca1" DESTINATION="ID_838803024" ENDARROW="Default" ENDINCLINATION="-519;-1168;" ID="Arrow_ID_1674512697" SOURCE="ID_1949450244" STARTARROW="None" STARTINCLINATION="446;0;"/>
|
<linktarget COLOR="#5b5ca1" DESTINATION="ID_838803024" ENDARROW="Default" ENDINCLINATION="-519;-1168;" ID="Arrow_ID_1674512697" SOURCE="ID_1949450244" STARTARROW="None" STARTINCLINATION="446;0;"/>
|
||||||
<linktarget COLOR="#5b5ca1" DESTINATION="ID_838803024" ENDARROW="Default" ENDINCLINATION="-599;-1344;" ID="Arrow_ID_842684168" SOURCE="ID_1828075998" STARTARROW="None" STARTINCLINATION="417;51;"/>
|
<linktarget COLOR="#5b5ca1" DESTINATION="ID_838803024" ENDARROW="Default" ENDINCLINATION="-599;-1344;" ID="Arrow_ID_842684168" SOURCE="ID_1828075998" STARTARROW="None" STARTINCLINATION="417;51;"/>
|
||||||
|
<linktarget COLOR="#8e7ba1" DESTINATION="ID_838803024" ENDARROW="Default" ENDINCLINATION="171;760;" ID="Arrow_ID_1707924491" SOURCE="ID_1065721692" STARTARROW="None" STARTINCLINATION="-1855;126;"/>
|
||||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1541858541550" ID="ID_1912142591" MODIFIED="1557498707233" TEXT="generische Abstraktionskomponente">
|
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1541858541550" ID="ID_1912142591" MODIFIED="1557498707233" TEXT="generische Abstraktionskomponente">
|
||||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue