Timeline: Analysis of possibly toxic input values
- protection against negative numbers seems adequate - a possible concern are handling of very large time spans - definitively have to guard against "poisonous" fractions (e.g. n / INT_MAX)
This commit is contained in:
parent
cc16953fd8
commit
d3fc6fd4de
3 changed files with 237 additions and 3 deletions
|
|
@ -60,6 +60,16 @@
|
|||
** - scale factor and visible window line up logically
|
||||
** - scale factor produces precise reproducible values
|
||||
**
|
||||
** ## Safety Guards
|
||||
**
|
||||
** Most setters require lib::time::TimeSpan or lib::time::Duration as _value arguments;_
|
||||
** based on those entities internal definition, they can be assumed to be sanitised,
|
||||
** within TimeValue bounds and properly oriented. Other setters taking possibly negative
|
||||
** numbers are prepared to handle these (e.g. as offset). Range checks are in place to
|
||||
** prevent possibly dangerous numbers from infesting the calculations.
|
||||
** @note rational integral arithmetics can be insidious, since normalisation requires
|
||||
** frequent multiplications, and large denominators might cause numeric overflow.
|
||||
**
|
||||
** ## Change listener
|
||||
**
|
||||
** A single change listener lambda can be installed (as of 10/2022 this is considered sufficient,
|
||||
|
|
@ -379,7 +389,7 @@ namespace model {
|
|||
nudgeVisiblePos (int steps)
|
||||
{
|
||||
FSecs dur{afterWin_-startWin_}; // navigate half window steps
|
||||
setVisibleRange (TimeSpan{Time{startWin_ + dur*steps/2}
|
||||
setVisibleRange (TimeSpan{Time{startWin_ + (dur*steps)/2}
|
||||
, dur});
|
||||
}
|
||||
|
||||
|
|
@ -761,6 +771,8 @@ namespace model {
|
|||
* relative to the overall canvas. Implemented using a cubic parabola, which moves quick
|
||||
* away from the boundaries, while hovering most of the time in the middle area.
|
||||
* @return factor effectively between 0 ... 1 (inclusive)
|
||||
* @warning in case of a "poisonous" input the calculation may go astray;
|
||||
* yet results are limited at least...
|
||||
*/
|
||||
static Rat
|
||||
parabolicAnchorRule (Rat posFactor)
|
||||
|
|
@ -769,6 +781,7 @@ namespace model {
|
|||
posFactor = (2*posFactor - 1); // -1 ... +1
|
||||
posFactor = posFactor*posFactor*posFactor; // -1 ... +1 but accelerating towards boundaries
|
||||
posFactor = (posFactor + 1) / 2; // 0 ... 1
|
||||
posFactor = util::limited (0, posFactor, 1);
|
||||
return posFactor;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -86,6 +86,8 @@ namespace test {
|
|||
verify_scroll();
|
||||
|
||||
verify_changeNotification();
|
||||
|
||||
toxic_corner_cases();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -482,6 +484,53 @@ namespace test {
|
|||
CHECK (win.px_per_sec() == 400);
|
||||
CHECK (wuz.px_per_sec() == 20);
|
||||
}
|
||||
|
||||
|
||||
/** @test verify safeguards when used in extreme corner cases */
|
||||
void
|
||||
toxic_corner_cases()
|
||||
{
|
||||
{
|
||||
ZoomWindow win{0, TimeSpan{_t(0), FSecs(0)}};
|
||||
CHECK (win.visible() == TimeSpan(_t(0), _t(23))); // uses DEFAULT_CANVAS instead of empty TimeSpan
|
||||
CHECK (win.px_per_sec() == 25); // falls back on default initial zoom factor
|
||||
CHECK (win.pxWidth() == 575); // allocates pixels in accordance to default
|
||||
|
||||
win.setOverallDuration(Duration{FSecs(50)});
|
||||
win.setVisibleDuration(Duration{FSecs(0)});
|
||||
CHECK (win.overallSpan() == TimeSpan(_t(0), _t(50)));
|
||||
CHECK (win.visible() == TimeSpan(_t(0), _t(23))); // falls back to DEFAULT_CANVAS size
|
||||
CHECK (win.pxWidth() == 575); // allocates pixels in accordance to default
|
||||
|
||||
win.calibrateExtension(0);
|
||||
CHECK (win.px_per_sec() == 25); // stays at default zoom factor
|
||||
CHECK (win.pxWidth() == 1); // retains 1px window size
|
||||
CHECK (win.visible().duration() == _t(1,25)); // visible window has thus 1/25s duration
|
||||
|
||||
win.setOverallRange(TimeSpan(_t(10), _t(0)));
|
||||
SHOW_EXPR (win.overallSpan());
|
||||
SHOW_EXPR (win.visible());
|
||||
SHOW_EXPR (_raw(win.visible().duration()));
|
||||
SHOW_EXPR (win.px_per_sec());
|
||||
SHOW_EXPR (win.pxWidth());
|
||||
|
||||
CHECK (TimeSpan(_t(10), _t(0)).duration() == Duration(FSecs(10))); // TimeSpan is always properly oriented by construction
|
||||
Duration evilReversed = static_cast<Duration> (_t(-10));
|
||||
SHOW_EXPR (evilReversed);
|
||||
SHOW_EXPR (TimeSpan(_t(20), evilReversed));
|
||||
|
||||
}
|
||||
{
|
||||
ZoomWindow win{};
|
||||
// SHOW_EXPR(win.overallSpan());
|
||||
// SHOW_EXPR(_raw(win.visible().duration()));
|
||||
// SHOW_EXPR(win.px_per_sec());
|
||||
// SHOW_EXPR(win.pxWidth());
|
||||
// CHECK (win.visible() == TimeSpan(_t(0), _t(23)));
|
||||
// CHECK (win.px_per_sec() == 25);
|
||||
// CHECK (win.pxWidth() == 575);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1379,7 +1379,7 @@
|
|||
<node COLOR="#338800" CREATED="1493753249399" HGAP="64" ID="ID_1023343635" MODIFIED="1561827464564" TEXT="#1098 hand-over in UI-Thread" VSHIFT="83">
|
||||
<linktarget COLOR="#a75677" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="-317;-24;" ID="Arrow_ID_274836249" SOURCE="ID_1146157818" STARTARROW="None" STARTINCLINATION="-647;-66;"/>
|
||||
<linktarget COLOR="#84c6b8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="21;233;" ID="Arrow_ID_1372135725" SOURCE="ID_995145542" STARTARROW="None" STARTINCLINATION="237;0;"/>
|
||||
<linktarget COLOR="#7caaa8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="2513;3565;" ID="Arrow_ID_1832047032" SOURCE="ID_489078622" STARTARROW="Default" STARTINCLINATION="3463;134;"/>
|
||||
<linktarget COLOR="#7caaa8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="2513;3565;" ID="Arrow_ID_1832047032" SOURCE="ID_489078622" STARTARROW="Default" STARTINCLINATION="2914;51;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1501804992301" ID="ID_1647263044" MODIFIED="1538263469665" TEXT="schedule event"/>
|
||||
<node CREATED="1501804985286" ID="ID_320977714" MODIFIED="1538263469665" TEXT="GTK-Mechanismus">
|
||||
|
|
@ -39533,11 +39533,170 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668180004015" ID="ID_1355163433" MODIFIED="1668180133079" TEXT="extreme Grenzfälle abtesten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1668212345981" ID="ID_1473341053" MODIFIED="1668212365788" TEXT="leer konstruiert ⟹ default-canvas">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668180016155" ID="ID_506165727" MODIFIED="1668180136076" TEXT="leere Intervalle">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668180071412" ID="ID_1188877277" MODIFIED="1668180136076" TEXT="falsch orientierte Intervalle">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1668262916332" ID="ID_670540657" MODIFIED="1668262927471" TEXT="weitgehend unmöglich">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1668262928548" ID="ID_186072598" MODIFIED="1668262939564" TEXT="TimeSpan verhindert das">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1668263012905" ID="ID_37434622" MODIFIED="1668263018116" TEXT="genauer: es ist bereits Duration"/>
|
||||
<node CREATED="1668263018992" ID="ID_774651709" MODIFIED="1668263029586" TEXT="Duration hat keinen normalen Copy-Konstruktur"/>
|
||||
<node CREATED="1668263130427" ID="ID_371714481" MODIFIED="1668263147178" TEXT="Duration nimmt in jedem Ctor einen Absolutbetrag"/>
|
||||
<node CREATED="1668263170236" ID="ID_1832591940" MODIFIED="1668263185566" TEXT="TimeSpan schickt alle Eingaben durch Duration-ctor"/>
|
||||
<node CREATED="1668263200351" ID="ID_526293515" MODIFIED="1668263226330" TEXT="⟹ sofern man TimeSpan per Value nimmt ist sogar Manipulation unmöglich">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1668262940706" ID="ID_1639008148" MODIFIED="1668262957124" TEXT="⟹ Eingangs-Checks vereinfachen"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1668262961151" ID="ID_1262854527" MODIFIED="1668270708694" TEXT="alle Eingänge daraufhin prüfen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1668263281549" ID="ID_1653448250" MODIFIED="1668263292760" TEXT="potentiell gefährlich">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263300631" ID="ID_1173749705" MODIFIED="1668265511790" TEXT="setMetric (Rat px_per_sec)">
|
||||
<arrowlink COLOR="#aa6877" DESTINATION="ID_1257614207" ENDARROW="Default" ENDINCLINATION="271;-11;" ID="Arrow_ID_292335664" STARTARROW="None" STARTINCLINATION="314;29;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1668263308095" ID="ID_41228001" MODIFIED="1668263308095" TEXT="nudgeMetric (int steps)">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1668265226231" HGAP="29" ID="ID_680870152" MODIFIED="1668265531172" TEXT="(ähnliche Problemlage)" VSHIFT="6">
|
||||
<arrowlink COLOR="#be7ca2" DESTINATION="ID_1943948610" ENDARROW="Default" ENDINCLINATION="57;-54;" ID="Arrow_ID_569700266" STARTARROW="None" STARTINCLINATION="197;26;"/>
|
||||
<font NAME="SansSerif" SIZE="8"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1668263379747" ID="ID_1108084309" MODIFIED="1668265880846" TEXT="setOverallStart (TimeValue start)">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node COLOR="#435e98" CREATED="1668265476934" HGAP="22" ID="ID_1672613430" MODIFIED="1668265497115" TEXT="Offset ⟹ harmlos" VSHIFT="2">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1668263363873" ID="ID_1000302477" MODIFIED="1668267369598" TEXT="nudgeVisiblePos (int steps)">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668267251650" ID="ID_772154372" MODIFIED="1668267361180" TEXT="potentieller TimeValue-wrap">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1668265476934" HGAP="22" ID="ID_1024656656" MODIFIED="1668265497115" TEXT="Offset ⟹ harmlos" VSHIFT="2">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1668263398546" ID="ID_1572318013" MODIFIED="1668265880846" TEXT="setVisiblePos (Time posToShow)">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node COLOR="#435e98" CREATED="1668265476934" HGAP="22" ID="ID_1485739923" MODIFIED="1668265497115" TEXT="Offset ⟹ harmlos" VSHIFT="2">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1668263409355" ID="ID_1494604965" MODIFIED="1668265848826" TEXT="setVisiblePos (Rat percentage)">
|
||||
<arrowlink COLOR="#895f96" DESTINATION="ID_759637608" ENDARROW="Default" ENDINCLINATION="124;-7;" ID="Arrow_ID_728050450" STARTARROW="None" STARTINCLINATION="166;15;"/>
|
||||
</node>
|
||||
<node CREATED="1668263422928" ID="ID_1049514706" MODIFIED="1668263422928" TEXT="setVisiblePos (double percentage)"/>
|
||||
</node>
|
||||
<node CREATED="1668263441959" ID="ID_1366157126" MODIFIED="1668263454322" TEXT="2.Layer — privat">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263464370" ID="ID_452384864" MODIFIED="1668269820128" TEXT="establishMetric (uint pxWidth, Time startWin, Time afterWin)">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668269822171" ID="ID_1581625515" MODIFIED="1668269880707" TEXT="Resultat sollte "ungiftig" sein">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
weil es direkt in das Feld <font face="Monospaced" color="#87179a">px_per_second_</font> geht
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1668269838609" ID="ID_982888658" MODIFIED="1668269848857" TEXT="geeignet normieren oder kappen?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263473958" ID="ID_1175951405" MODIFIED="1668270354481" TEXT="conformWindowToMetric (Rat changedMetric)">
|
||||
<arrowlink COLOR="#bf0f5b" DESTINATION="ID_1671513743" ENDARROW="Default" ENDINCLINATION="297;-23;" ID="Arrow_ID_389982782" STARTARROW="None" STARTINCLINATION="-323;20;"/>
|
||||
<linktarget COLOR="#965e8b" DESTINATION="ID_1175951405" ENDARROW="Default" ENDINCLINATION="253;-8;" ID="Arrow_ID_354964355" SOURCE="ID_909162669" STARTARROW="None" STARTINCLINATION="302;-12;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1668263585452" ID="ID_195681721" MODIFIED="1668270219934" TEXT="conformWindowToCanvas(<current-settings>)">
|
||||
<node CREATED="1668270193562" ID="ID_918641802" MODIFIED="1668270440632" TEXT="nur additive arithmetik">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1668270199865" ID="ID_764029688" MODIFIED="1668270213799" TEXT="bereits explizit auf Grenzen geprüft">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263473958" ID="ID_148236436" MODIFIED="1668270289834" TEXT="conformToBounds (Rat changedMetric)">
|
||||
<arrowlink COLOR="#bf0f5b" DESTINATION="ID_1671513743" ENDARROW="Default" ENDINCLINATION="297;-23;" ID="Arrow_ID_1815772846" STARTARROW="None" STARTINCLINATION="-292;20;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263629246" ID="ID_1257614207" MODIFIED="1668265511791" TEXT="mutateScale (Rat changedMetric)">
|
||||
<arrowlink COLOR="#e62f5c" DESTINATION="ID_651838862" ENDARROW="Default" ENDINCLINATION="115;-4;" ID="Arrow_ID_1930230162" STARTARROW="None" STARTINCLINATION="-189;14;"/>
|
||||
<linktarget COLOR="#aa6877" DESTINATION="ID_1257614207" ENDARROW="Default" ENDINCLINATION="271;-11;" ID="Arrow_ID_292335664" SOURCE="ID_1173749705" STARTARROW="None" STARTINCLINATION="314;29;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668265021139" HGAP="52" ID="ID_1943948610" MODIFIED="1668265531172" TEXT="prüfen: sehr kleine Metrik" VSHIFT="-2">
|
||||
<linktarget COLOR="#be7ca2" DESTINATION="ID_1943948610" ENDARROW="Default" ENDINCLINATION="57;-54;" ID="Arrow_ID_569700266" SOURCE="ID_680870152" STARTARROW="None" STARTINCLINATION="197;26;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1668265390104" ID="ID_1154641838" MODIFIED="1668265435386" TEXT="es gibt keine Unterschwelle">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1668265398152" ID="ID_754119758" MODIFIED="1668265427796" TEXT="⟶ hier könnte sehr großer Nenner ins System gelangen">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1668263638141" ID="ID_909162669" MODIFIED="1668270369633" TEXT="mutateDuration (FSecs duration, uint px =0)">
|
||||
<arrowlink COLOR="#965e8b" DESTINATION="ID_1175951405" ENDARROW="Default" ENDINCLINATION="253;-8;" ID="Arrow_ID_354964355" STARTARROW="None" STARTINCLINATION="302;-12;"/>
|
||||
<node CREATED="1668270374842" HGAP="21" ID="ID_1976979366" MODIFIED="1668270395644" TEXT="delegiert an conformWindowToMetric(Rat)" VSHIFT="9">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263652677" ID="ID_759637608" MODIFIED="1668265848826" TEXT="anchorWindowAtPosition (FSecs canvasOffset)">
|
||||
<linktarget COLOR="#895f96" DESTINATION="ID_759637608" ENDARROW="Default" ENDINCLINATION="124;-7;" ID="Arrow_ID_728050450" SOURCE="ID_1494604965" STARTARROW="None" STARTINCLINATION="166;15;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1668265925547" ID="ID_548541569" MODIFIED="1668265934174" TEXT="negative Werte">
|
||||
<node CREATED="1668267213730" ID="ID_751640089" MODIFIED="1668267225777" TEXT="grundsätzlich hier vorgesehen"/>
|
||||
<node CREATED="1668267238564" ID="ID_1057480192" MODIFIED="1668267248362" TEXT="startWin_ = startAll_ + (canvasOffset - partBeforeAnchor);">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668267251650" ID="ID_1280626173" MODIFIED="1668267290312" TEXT="potentieller TimeValue-wrap">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1668267393360" ID="ID_1700728412" MODIFIED="1668267398176" TEXT="giftige Brüche">
|
||||
<node CREATED="1668267422500" ID="ID_17566048" MODIFIED="1668267468507" TEXT="parabolicAnchorRule">
|
||||
<arrowlink COLOR="#e92c3f" DESTINATION="ID_1689286236" ENDARROW="Default" ENDINCLINATION="82;-4;" ID="Arrow_ID_176217068" STARTARROW="None" STARTINCLINATION="-158;21;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263473958" ID="ID_773636992" MODIFIED="1668270626473" TEXT="placeWindowRelativeToAnchor (FSecs duration)">
|
||||
<arrowlink COLOR="#bf0f5b" DESTINATION="ID_1671513743" ENDARROW="Default" ENDINCLINATION="297;-23;" ID="Arrow_ID_882084800" STARTARROW="None" STARTINCLINATION="-238;15;"/>
|
||||
<node CREATED="1668270662235" ID="ID_238899324" MODIFIED="1668270676789" TEXT="kein wirklicher Schaden möglich"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668270677518" ID="ID_51247840" MODIFIED="1668270694761" TEXT="aber Berechnung kann wild entgleisen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1668263721530" ID="ID_829406482" MODIFIED="1668270430868" TEXT="establishWindowDuration (TimeVar duration)">
|
||||
<node CREATED="1668270193562" ID="ID_440259374" MODIFIED="1668270440632" TEXT="nur additive arithmetik">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1668270199865" ID="ID_927662816" MODIFIED="1668270213799" TEXT="bereits explizit auf Grenzen geprüft">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668263742928" ID="ID_1689286236" MODIFIED="1668267468507" TEXT="parabolicAnchorRule (Rat posFactor)">
|
||||
<linktarget COLOR="#e92c3f" DESTINATION="ID_1689286236" ENDARROW="Default" ENDINCLINATION="82;-4;" ID="Arrow_ID_176217068" SOURCE="ID_17566048" STARTARROW="None" STARTINCLINATION="-158;21;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1668267470317" ID="ID_409576187" MODIFIED="1668267475864" TEXT="kann entgleisen"/>
|
||||
<node CREATED="1668269162412" ID="ID_983739705" MODIFIED="1668269175422" TEXT="Fehlfunktion ist aber letztlich harmlos"/>
|
||||
<node CREATED="1668269178282" ID="ID_697782687" MODIFIED="1668269188827" TEXT="die nachgelagerte Normalisierung fängt die Konsequenzen auf"/>
|
||||
<node COLOR="#338800" CREATED="1668269189680" ID="ID_1612606864" MODIFIED="1668269410626" TEXT="aber: Limitierung am Ausgang fehlt ⟹ nachrüsten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668180030777" ID="ID_1319796356" MODIFIED="1668180136077" TEXT="1 µ-Tick">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -39545,6 +39704,19 @@
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668180054302" ID="ID_1604190635" MODIFIED="1668180136078" TEXT="1 Pixel">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668264626100" ID="ID_45091906" MODIFIED="1668264632183" TEXT="giftige Brüche">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668264634478" ID="ID_651838862" MODIFIED="1668264715601" TEXT="setMetric (Rat) ⟶ mutateScale (Rat changedMetric)">
|
||||
<linktarget COLOR="#e62f5c" DESTINATION="ID_651838862" ENDARROW="Default" ENDINCLINATION="115;-4;" ID="Arrow_ID_1930230162" SOURCE="ID_1257614207" STARTARROW="None" STARTINCLINATION="-189;14;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1668270062492" ID="ID_1671513743" MODIFIED="1668270626473" TEXT="entgiftungs-Methode schaffen">
|
||||
<linktarget COLOR="#bf0f5b" DESTINATION="ID_1671513743" ENDARROW="Default" ENDINCLINATION="297;-23;" ID="Arrow_ID_389982782" SOURCE="ID_1175951405" STARTARROW="None" STARTINCLINATION="-323;20;"/>
|
||||
<linktarget COLOR="#bf0f5b" DESTINATION="ID_1671513743" ENDARROW="Default" ENDINCLINATION="297;-23;" ID="Arrow_ID_1815772846" SOURCE="ID_148236436" STARTARROW="None" STARTINCLINATION="-292;20;"/>
|
||||
<linktarget COLOR="#bf0f5b" DESTINATION="ID_1671513743" ENDARROW="Default" ENDINCLINATION="297;-23;" ID="Arrow_ID_882084800" SOURCE="ID_773636992" STARTARROW="None" STARTINCLINATION="-238;15;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1668180120032" ID="ID_346213896" MODIFIED="1668180136079" TEXT="Grenzen des Zeitformats">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
|
|
@ -43861,7 +44033,7 @@
|
|||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1501778430101" ID="ID_489078622" MODIFIED="1561827465675" TEXT="#1098 hand-over to UI thread">
|
||||
<arrowlink COLOR="#7caaa8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="2513;3565;" ID="Arrow_ID_1832047032" STARTARROW="Default" STARTINCLINATION="3463;134;"/>
|
||||
<arrowlink COLOR="#7caaa8" DESTINATION="ID_1023343635" ENDARROW="Default" ENDINCLINATION="2513;3565;" ID="Arrow_ID_1832047032" STARTARROW="Default" STARTINCLINATION="2914;51;"/>
|
||||
<linktarget COLOR="#6c5f80" DESTINATION="ID_489078622" ENDARROW="Default" ENDINCLINATION="712;-47;" ID="Arrow_ID_485145709" SOURCE="ID_31825421" STARTARROW="None" STARTINCLINATION="1538;-37;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1531583488816" ID="ID_626261980" MODIFIED="1531583585348" TEXT="Dispatcher">
|
||||
|
|
|
|||
Loading…
Reference in a new issue