Segmentation: devise algorithm for splitSplice operation
This commit is contained in:
parent
b582c35c9f
commit
bf978fcda1
5 changed files with 328 additions and 93 deletions
|
|
@ -83,7 +83,7 @@ namespace fixture {
|
|||
// default copy acceptable
|
||||
|
||||
Time start() const { return span_.start(); }
|
||||
Time end() const { return span_.end(); }
|
||||
Time after() const { return span_.end(); }
|
||||
|
||||
engine::JobTicket const&
|
||||
jobTicket() const
|
||||
|
|
|
|||
|
|
@ -29,7 +29,9 @@
|
|||
#include "lib/error.hpp"
|
||||
#include "steam/fixture/segmentation.hpp"
|
||||
//#include "steam/mobject/builder/fixture-change-detector.hpp" ///////////TODO
|
||||
#include "lib/time/timevalue.hpp"
|
||||
|
||||
#include <tuple>
|
||||
|
||||
|
||||
namespace steam {
|
||||
|
|
@ -48,20 +50,79 @@ namespace fixture {
|
|||
|
||||
Segmentation::~Segmentation() { } // emit VTable here...
|
||||
|
||||
/** access the globally valid registry instance.
|
||||
* @throw error::State if this global registry is
|
||||
* already closed or not yet initialised. */
|
||||
//ModelPortRegistry&
|
||||
//ModelPortRegistry::globalInstance()
|
||||
//{
|
||||
// LockRegistry global_lock;
|
||||
// if (theGlobalRegistry.isValid())
|
||||
// return theGlobalRegistry();
|
||||
//
|
||||
// throw error::State ("global model port registry is not accessible"
|
||||
// , LERR_(BUILDER_LIFECYCLE));
|
||||
//}
|
||||
|
||||
namespace {// Implementation of Split-Splice algorithm
|
||||
|
||||
using lib::time::Time;
|
||||
using OptTime = std::optional<Time>;
|
||||
using Iter = typename list<Segment>::iterator;
|
||||
|
||||
|
||||
/**
|
||||
* Descriptor and working context to split/splice in a new Interval.
|
||||
* The »Split-Splice« algorithm works on a seamless segmentation of
|
||||
* an ordered working axis, represented as sequence of intervals.
|
||||
* The purpose is to integrate a new Segment / interval, thereby
|
||||
* truncating / splitting / filling adjacent intervals to fit
|
||||
*/
|
||||
class SplitSpliceAlgo
|
||||
: util::NonCopyable
|
||||
{
|
||||
enum Verb { NIL
|
||||
, DROP
|
||||
, TRUNC
|
||||
, INS_NOP
|
||||
, SEAMLESS
|
||||
};
|
||||
|
||||
Verb opPred = NIL,
|
||||
opSucc = NIL;
|
||||
|
||||
Iter pred{};
|
||||
Iter succ{};
|
||||
|
||||
Time start = Time::NEVER,
|
||||
after = Time::NEVER;
|
||||
|
||||
/* ======= elementary operations ======= */
|
||||
|
||||
Time getStart (Iter elm) { return elm->start(); }
|
||||
Time getAfter (Iter elm) { return elm->after(); }
|
||||
|
||||
Iter
|
||||
createElm (Time start, Time after)
|
||||
{
|
||||
UNIMPLEMENTED ("create new Segment");
|
||||
}
|
||||
|
||||
Iter
|
||||
cloneElm (Iter elm, Time start, Time after)
|
||||
{
|
||||
UNIMPLEMENTED ("clone Segment and modify time");
|
||||
}
|
||||
|
||||
public:
|
||||
void
|
||||
establishSplitPoint (Iter startAll, Iter afterAll
|
||||
,OptTime start, OptTime after)
|
||||
{
|
||||
UNIMPLEMENTED ("Stage-1 and Stage-2");
|
||||
}
|
||||
|
||||
void
|
||||
determineRelations()
|
||||
{
|
||||
UNIMPLEMENTED ("Stage-3");
|
||||
}
|
||||
|
||||
std::pair<Iter, Iter>
|
||||
performSplitSplice()
|
||||
{
|
||||
UNIMPLEMENTED ("Stage-4 - doIT");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}//(End)SlitSplice impl
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -87,7 +148,10 @@ namespace fixture {
|
|||
Segment const&
|
||||
Segmentation::splitSplice (OptTime start, OptTime after, const engine::JobTicket* jobTicket)
|
||||
{
|
||||
UNIMPLEMENTED ("determine predecessor, successor and orientation and perform del/trunc/split/swap/insert");
|
||||
SplitSpliceAlgo splicr;
|
||||
splicr.establishSplitPoint (segments_.begin(),segments_.end(), start,after);
|
||||
splicr.determineRelations();
|
||||
splicr.performSplitSplice();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ namespace fixture {
|
|||
operator[] (TimeValue time) const
|
||||
{
|
||||
for (auto& seg : segments_)
|
||||
if (seg.end() > time)
|
||||
if (seg.after() > time)
|
||||
return seg;
|
||||
throw error::State (_Fmt{"Fixture datastructure corrupted: Time %s not covered"} % time);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7141,7 +7141,7 @@ The Fixture is mostly comprised of the Segementation datastructure, but some oth
|
|||
Largely the storage of the render nodes network is hooked up behind the Fixture &rarr; [[storage considerations|FixtureStorage]]
|
||||
</pre>
|
||||
</div>
|
||||
<div title="SegmentationChange" creator="Ichthyostega" modifier="Ichthyostega" created="202305020227" modified="202305020228" tags="spec operational Builder draft" changecount="3">
|
||||
<div title="SegmentationChange" creator="Ichthyostega" modifier="Ichthyostega" created="202305020227" modified="202305021819" tags="spec operational Builder draft" changecount="28">
|
||||
<pre>At the end of the build process, the existing [[Segmentation]] possibly needs to be changed, extended or adapted.
|
||||
This change must be performed as a //transactional switch,// since render or playback processes might be performed concurrently. All Fixture and low-level-Model datastructures are //immutable// -- thus for any changes, suitably adapted structures will be built as a replacement.
|
||||
|
||||
|
|
@ -7150,72 +7150,76 @@ This is an implementation level operation, which analyses the existing Segmentat
|
|||
|
||||
!!!Structure of the split-splice operation
|
||||
{{red{1.5.2023 : Analysis and implementation draft}}}
|
||||
{{{
|
||||
Algorithmus
|
||||
Invariante
|
||||
vollständige lückenlose Abdeckung der gesamten Zeitachse
|
||||
alle Einträge sind aufsteigend sortiert
|
||||
Vorgänger und Nachfolger finden
|
||||
Predecessor
|
||||
sep ≔ start oder after (wenn start fehlt)
|
||||
Pstart >= sep ⟹ ↯ Predecessor
|
||||
suche größten mit Pstart < sep
|
||||
Succsessor ist erster, der diese Bedingung verletzt
|
||||
andernfalls: Successor == Predecessor (split)
|
||||
Start- und Endpunkt festsetzen
|
||||
definerter start/after-Punkt ist stets verbindlich
|
||||
fehlernder start
|
||||
sep ≡ after
|
||||
Pend < sep ⟹ start ≔ Pend
|
||||
sonst ⟹ start ≔ Pstart (replace or trunc)
|
||||
fehlender after
|
||||
sep ≡ start ∧ Sstart >= sep
|
||||
Sstart > sep ⟹ after ≔ Sstart
|
||||
sonst ⟹ after ≔ Send (replace or trunc)
|
||||
POST
|
||||
start < after
|
||||
sonst ⟹ REJECT
|
||||
Pstart <= start
|
||||
Pstart == Sstart ∨ start <= Sstart
|
||||
Relation zum Vor/Nachfolger bestimmen
|
||||
Pstart < start
|
||||
Pend < start ⟹ ins NOP-Predecessor
|
||||
Pend == start ⟹ seamless
|
||||
Pend <= after ⟹ truc(Predecessor)
|
||||
Pend > after ⟹ split(Predecessor)
|
||||
Pstart == start
|
||||
Pend <= after ⟹ del(Predecessor)
|
||||
Pend > after ⟹ swap_trunc(Predecessor)
|
||||
Predecessor == Successor
|
||||
Pend == after == Time::NEVER ⟹ trunc(Predecessor)
|
||||
Pend > after ⟹ split(Predecessor)
|
||||
Sstart < after
|
||||
Send < after ⟹ del(Successor) and ++Successor and recurse (same base case)
|
||||
Send == after ⟹ del(Successor)
|
||||
Send > after ⟹ trunc(Successor)
|
||||
Sstart == after ⟹ seamless
|
||||
after < Sstart ⟹ ins NOP-Successor
|
||||
einfügen und löschen
|
||||
Predecessor
|
||||
trunc ⟹ del
|
||||
split ⟹ del
|
||||
del ⟹ del
|
||||
swap_trunc ⟹ del
|
||||
Successor
|
||||
de++ ⟹ del
|
||||
trunc ⟹ del
|
||||
insert
|
||||
before
|
||||
ins NOP-Predecessor
|
||||
trunc(Predecessor) ⟹ ins copy Predecessor-shortened-end
|
||||
split(Predecessor) ⟹ ins copy Predecessor shortened-end
|
||||
new Segment
|
||||
after
|
||||
split(Predecessor) ⟹ ins copy Predecessor shortened-start
|
||||
swap_trunc(Predecessor) ⟹ ins copy Predecessor shortened-start
|
||||
trunc(Successor) ⟹ ins copy Successor shortened-start
|
||||
ins NOP-Successor
|
||||
}}}</pre>
|
||||
;Invariant
|
||||
:complete and valid [[Segmentation]] always retained
|
||||
:* seamless coverage the complete time axis [-∞ .. +∞]
|
||||
:* all entries ordered ascending (in time)
|
||||
;Stage-1
|
||||
:determine Predecessor and Successor
|
||||
:* //Predecessor//<br> {{{sep}}} ≔ {{{start}}} or {{{after}}} (if missing {{{start}}})<br> P~~start~~ >= {{{sep}}} ⟹ ↯ Predecessor
|
||||
:** &rarr; find largest Predecessor with P~~start~~ < {{{sep}}}
|
||||
:* //Successor// is the first one to violate this condition
|
||||
:* //otherwise// Successor == Predecessor (split)
|
||||
;Stage-2
|
||||
:establish {{{start}}} and end point of new segment
|
||||
:* explicitly given {{{start}}}/{{{after}}}-points are binding
|
||||
:** missing {{{start}}}<br> {{{sep}}} ≡ {{{after}}}
|
||||
:*** P~~after~~ < {{{sep}}} ⟹ {{{start}}} ≔ P~~after~~
|
||||
:*** //else// ⟹ {{{start}}} ≔ P~~start~~ (replace or trunc)
|
||||
:** missing {{{after}}}<br> {{{sep}}} ≡ {{{start}}} ∧ S~~start~~ >= {{{sep}}}
|
||||
:*** S~~start~~ > {{{sep}}} ⟹ {{{after}}} ≔ S~~start~~
|
||||
:*** //else// ⟹ {{{after}}} ≔ S~~after~~ (replace or trunc)
|
||||
:''POST''
|
||||
:* {{{start}}} < {{{after}}}
|
||||
:** //else// ⟹ REJECT
|
||||
:* P~~start~~ <= {{{start}}}
|
||||
:* P~~start~~ == S~~start~~ ∨ {{{start}}} <= S~~start~~
|
||||
;Stage-3
|
||||
:determine relation to //Predecessor// and //Successor//
|
||||
:* //case// P~~start~~ < {{{start}}}
|
||||
:** P~~after~~ < {{{start}}} ⟹ ins ~NOP-Predecessor
|
||||
:** P~~after~~ == {{{start}}} ⟹ seamless
|
||||
:** P~~after~~ <= {{{after}}} ⟹ truc(Predecessor)
|
||||
:** P~~after~~ > {{{after}}} ⟹ split(Predecessor)
|
||||
:* //case// P~~start~~ == {{{start}}}
|
||||
:** P~~after~~ <= {{{after}}} ⟹ drop(Predecessor)
|
||||
:** P~~after~~ > {{{after}}} ⟹ swap_trunc(Predecessor)
|
||||
:* //case// Predecessor == Successor<br> //this case has already been completely covered by the preceding cases//
|
||||
:** P~~after~~ == {{{after}}} == Time::NEVER ⟹ trunc(Predecessor)
|
||||
:** P~~after~~ > {{{after}}} ⟹ split(Predecessor)
|
||||
:* //case// S~~start~~ < {{{after}}}
|
||||
:** S~~after~~ < {{{after}}} ⟹ drop(Successor) and ++Successor and recurse (same base case)
|
||||
:** S~~after~~ == {{{after}}} ⟹ drop(Successor)
|
||||
:** S~~after~~ > {{{after}}} ⟹ trunc(Successor)
|
||||
:** S~~start~~ == {{{after}}} ⟹ seamless
|
||||
:** {{{after}}} < S~~start~~ ⟹ ins ~NOP-Successor
|
||||
;Stage-4
|
||||
:perform element insertion and replacement
|
||||
:* for the //Predecessor//
|
||||
:** trunc ⟹ del
|
||||
:** split ⟹ del
|
||||
:** drop ⟹ del
|
||||
:** swap_trunc ⟹ del
|
||||
:** ins_nop | seamless ⟹ retain
|
||||
:* for the //Successor//
|
||||
:** drop++ ⟹ del
|
||||
:** trunc ⟹ del
|
||||
:** ins_nop | seamless ⟹ retain
|
||||
:* for //insertion of new elements//
|
||||
:** &rarr;''before''<br> //cases//
|
||||
:*** ins ~NOP-Predecessor
|
||||
:*** trunc(Predecessor) ⟹ ins copy Predecessor-shortened-end
|
||||
:*** split(Predecessor) ⟹ ins copy Predecessor shortened-end
|
||||
:** &rarr;''new Segment''
|
||||
:** &rarr;''after''<br> //cases//
|
||||
:*** split(Predecessor) ⟹ ins copy Predecessor shortened-{{{start}}}
|
||||
:*** swap_trunc(Predecessor) ⟹ ins copy Predecessor shortened-{{{start}}}
|
||||
:*** trunc(Successor) ⟹ ins copy Successor shortened-{{{start}}}
|
||||
:*** ins ~NOP-Successor
|
||||
|
||||
!!!Implementation techique
|
||||
The split-splice operation is performed always for a single segment in the context of an existing segmentation; the covered range can be defined explicitly, or by partial spec. For each application of this algorithm, an instance of a //working context// is created (on stack) and initialised by scanning the existing segmentation to establish the insert point. The four stages are then performed on this working data, thereby determining the handling cases -- and in the last stage, new elements are inserted and existing elements are deleted (assuming immutable segment data, any changes and adaptations are done by inserting a modified clone copy).
|
||||
</pre>
|
||||
</div>
|
||||
<div title="Sequence" modifier="Ichthyostega" created="201001252327" modified="201505310118" tags="def" changecount="2">
|
||||
<pre>A sequence is a collection of media objects, arranged onto a fork ("track tree"). Sequences are the building blocks within the session. To be visible and editable, a session needs to be bound into a top-level [[Timeline]]. Alternatively, it may be used as a VirtualClip nested within another sequence.
|
||||
|
|
|
|||
|
|
@ -70088,24 +70088,28 @@
|
|||
<node CREATED="1682989072565" ID="ID_574776010" MODIFIED="1682989310210" TEXT="Pstart < start">
|
||||
<node CREATED="1682989100107" ID="ID_1303238476" MODIFIED="1682989331640" TEXT="Pend < start ⟹ ins NOP-Predecessor"/>
|
||||
<node CREATED="1682989363818" ID="ID_626589766" MODIFIED="1682989412757" TEXT="Pend == start ⟹ seamless"/>
|
||||
<node CREATED="1682989432318" ID="ID_1285136346" MODIFIED="1682989453085" TEXT="Pend <= after ⟹ truc(Predecessor)"/>
|
||||
<node CREATED="1682989432318" ID="ID_1285136346" MODIFIED="1682989453085" TEXT="Pend <= after ⟹ truc(Predecessor)">
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1285136346" ENDARROW="Default" ENDINCLINATION="218;0;" ID="Arrow_ID_1363539474" SOURCE="ID_7906079" STARTARROW="Default" STARTINCLINATION="189;0;"/>
|
||||
</node>
|
||||
<node CREATED="1682989463146" ID="ID_1057868667" MODIFIED="1682990037890" TEXT="Pend > after ⟹ split(Predecessor)">
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1057868667" ENDARROW="Default" ENDINCLINATION="192;0;" ID="Arrow_ID_638145525" SOURCE="ID_242314941" STARTARROW="Default" STARTINCLINATION="321;12;"/>
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1057868667" ENDARROW="Default" ENDINCLINATION="192;0;" ID="Arrow_ID_638145525" SOURCE="ID_242314941" STARTARROW="Default" STARTINCLINATION="347;11;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1682989518809" ID="ID_994366359" MODIFIED="1682989523086" TEXT="Pstart == start">
|
||||
<node CREATED="1682989432318" ID="ID_1069008527" MODIFIED="1682989559145" TEXT="Pend <= after ⟹ del(Predecessor)"/>
|
||||
<node CREATED="1682989432318" ID="ID_1069008527" MODIFIED="1683045577966" TEXT="Pend <= after ⟹ drop(Predecessor)"/>
|
||||
<node CREATED="1682989463146" ID="ID_514650224" MODIFIED="1682989628688" TEXT="Pend > after ⟹ swap_trunc(Predecessor)"/>
|
||||
</node>
|
||||
<node CREATED="1682989799344" ID="ID_1899821024" MODIFIED="1682989806256" TEXT="Predecessor == Successor">
|
||||
<node CREATED="1682989855439" ID="ID_7906079" MODIFIED="1682989886621" TEXT="Pend == after == Time::NEVER ⟹ trunc(Predecessor)"/>
|
||||
<node CREATED="1682989855439" ID="ID_7906079" MODIFIED="1682989886621" TEXT="Pend == after == Time::NEVER ⟹ trunc(Predecessor)">
|
||||
<arrowlink DESTINATION="ID_1285136346" ENDARROW="Default" ENDINCLINATION="218;0;" ID="Arrow_ID_1363539474" STARTARROW="Default" STARTINCLINATION="189;0;"/>
|
||||
</node>
|
||||
<node CREATED="1682989964471" ID="ID_242314941" MODIFIED="1682990037890" TEXT="Pend > after ⟹ split(Predecessor)">
|
||||
<arrowlink DESTINATION="ID_1057868667" ENDARROW="Default" ENDINCLINATION="192;0;" ID="Arrow_ID_638145525" STARTARROW="Default" STARTINCLINATION="321;12;"/>
|
||||
<arrowlink DESTINATION="ID_1057868667" ENDARROW="Default" ENDINCLINATION="192;0;" ID="Arrow_ID_638145525" STARTARROW="Default" STARTINCLINATION="347;11;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1682990361746" ID="ID_540769988" MODIFIED="1682990378568" TEXT="Sstart < after">
|
||||
<node CREATED="1682990416619" ID="ID_1218355846" MODIFIED="1682990512242" TEXT="Send < after ⟹ del(Successor) and ++Successor and recurse (same base case)"/>
|
||||
<node CREATED="1682990517405" ID="ID_1733924563" MODIFIED="1682990537807" TEXT="Send == after ⟹ del(Successor)"/>
|
||||
<node CREATED="1682990416619" ID="ID_1218355846" MODIFIED="1683044729239" TEXT="Send < after ⟹ drop(Successor) and ++Successor and recurse (same base case)"/>
|
||||
<node CREATED="1682990517405" ID="ID_1733924563" MODIFIED="1683044735150" TEXT="Send == after ⟹ drop(Successor)"/>
|
||||
<node CREATED="1682990575017" ID="ID_1792970357" MODIFIED="1682990587208" TEXT="Send > after ⟹ trunc(Successor)"/>
|
||||
</node>
|
||||
<node CREATED="1682990756277" ID="ID_1049988377" MODIFIED="1682990797692" TEXT="Sstart == after ⟹ seamless"/>
|
||||
|
|
@ -70116,12 +70120,14 @@
|
|||
<node CREATED="1682991925184" ID="ID_80874811" MODIFIED="1682991934113" TEXT="Predecessor">
|
||||
<node CREATED="1682991935183" ID="ID_100248576" MODIFIED="1682991953832" TEXT="trunc ⟹ del"/>
|
||||
<node CREATED="1682991959963" ID="ID_1359030638" MODIFIED="1682991991739" TEXT="split ⟹ del"/>
|
||||
<node CREATED="1682991992375" ID="ID_1138806541" MODIFIED="1682991996168" TEXT="del ⟹ del"/>
|
||||
<node CREATED="1682991992375" ID="ID_1138806541" MODIFIED="1683046079451" TEXT="drop ⟹ del"/>
|
||||
<node CREATED="1682991997084" ID="ID_1555435391" MODIFIED="1682992007785" TEXT="swap_trunc ⟹ del"/>
|
||||
<node CREATED="1683046112074" ID="ID_1153918582" MODIFIED="1683046131523" TEXT="ins_nop | seamless ⟹ retain"/>
|
||||
</node>
|
||||
<node CREATED="1682992015840" ID="ID_1551079661" MODIFIED="1682992017823" TEXT="Successor">
|
||||
<node CREATED="1682992042818" ID="ID_750532199" MODIFIED="1682992082750" TEXT="de++ ⟹ del"/>
|
||||
<node CREATED="1682992042818" ID="ID_750532199" MODIFIED="1683046143586" TEXT="drop++ ⟹ del"/>
|
||||
<node CREATED="1682992086602" ID="ID_79310561" MODIFIED="1682992091821" TEXT="trunc ⟹ del"/>
|
||||
<node CREATED="1683046112074" ID="ID_288339130" MODIFIED="1683046131523" TEXT="ins_nop | seamless ⟹ retain"/>
|
||||
</node>
|
||||
<node CREATED="1682992101946" ID="ID_556573150" MODIFIED="1682992140097" TEXT="insert">
|
||||
<node CREATED="1682992189962" ID="ID_981883843" MODIFIED="1682992192417" TEXT="before">
|
||||
|
|
@ -70141,6 +70147,71 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682993086565" ID="ID_469257294" MODIFIED="1682993090645" TEXT="Implementierung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683042576253" ID="ID_1878728765" MODIFIED="1683042587092" TEXT="Konzept">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683042638127" ID="ID_1570983964" MODIFIED="1683042656744" TEXT="Deskriptor SpliceAct">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1683042697806" ID="ID_1462476322" MODIFIED="1683043770315" TEXT="Task-Record">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1683042708897" ID="ID_1994905381" MODIFIED="1683042712143" TEXT="Tupel-derived"/>
|
||||
<node CREATED="1683042713068" ID="ID_467754420" MODIFIED="1683042718110" TEXT="Enum als verb"/>
|
||||
<node CREATED="1683042729238" ID="ID_1766658701" MODIFIED="1683042732508" TEXT="Argumente">
|
||||
<node CREATED="1683042751566" ID="ID_1881769035" MODIFIED="1683042777102" TEXT="target : Iter"/>
|
||||
<node CREATED="1683043762383" ID="ID_451784452" MODIFIED="1683043763464" TEXT="Time"/>
|
||||
<node CREATED="1683043781546" ID="ID_924440661" MODIFIED="1683043804163" TEXT="gar nicht notwendig — per Kontext klar">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1683043806248" ID="ID_358437836" MODIFIED="1683043811748" TEXT="Enum als verb">
|
||||
<node CREATED="1683043814387" ID="ID_312010971" MODIFIED="1683043834772" TEXT="jeweils separat für pred und succ"/>
|
||||
<node CREATED="1683043835634" ID="ID_1729162283" MODIFIED="1683043837062" TEXT="Fälle">
|
||||
<node CREATED="1683043887635" ID="ID_1329437740" MODIFIED="1683043891434" TEXT="SEAMLESS"/>
|
||||
<node CREATED="1683043880347" ID="ID_836682678" MODIFIED="1683043882928" TEXT="INS_NOP"/>
|
||||
<node CREATED="1683043904265" ID="ID_251771628" MODIFIED="1683043905981" TEXT="TRUNC"/>
|
||||
<node CREATED="1683044668063" ID="ID_1598320614" MODIFIED="1683044671822" TEXT="DROP"/>
|
||||
<node CREATED="1683044547460" ID="ID_1256792958" MODIFIED="1683044552526" TEXT="indirekt codiert....">
|
||||
<node CREATED="1683044555202" ID="ID_1892772312" MODIFIED="1683044556606" TEXT="SPLIT">
|
||||
<node CREATED="1683044601308" ID="ID_657233494" MODIFIED="1683044617686" TEXT="Predecessor auch als Successor markiert"/>
|
||||
<node CREATED="1683044624433" ID="ID_1880803006" MODIFIED="1683044633275" TEXT="beide mit TRUNC - Verb"/>
|
||||
</node>
|
||||
<node CREATED="1683044559634" ID="ID_1736529823" MODIFIED="1683044562377" TEXT="SWAP_TRUNC">
|
||||
<node CREATED="1683044638648" ID="ID_1428435516" MODIFIED="1683044680653" TEXT="Predecessor als DROP"/>
|
||||
<node CREATED="1683044682001" ID="ID_531874522" MODIFIED="1683044696142" TEXT="Predecessor auch als Successor mit TRUNC markiert"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1683045976036" ID="ID_1600965970" MODIFIED="1683045990086" TEXT="Predecessor und Successor per Iterator referenzieren"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683046583116" ID="ID_133574091" MODIFIED="1683046722114" TEXT="lokale Umsetzung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1683046618535" ID="ID_545931815" MODIFIED="1683046633053" TEXT="den Deskriptor als lokale/anonyme Klasse"/>
|
||||
<node CREATED="1683046633701" ID="ID_1909003590" MODIFIED="1683046644503" TEXT="die Schritte des Algo als Methoden"/>
|
||||
<node CREATED="1683046648011" ID="ID_884620601" MODIFIED="1683046664621" TEXT="Arbeitsdaten als Member"/>
|
||||
<node CREATED="1683046711054" ID="ID_815326523" MODIFIED="1683046719941" TEXT="Integration als statische Funktion"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683046722945" ID="ID_113209914" MODIFIED="1683046727395" TEXT="Generalisierung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1683046728800" ID="ID_1510597200" MODIFIED="1683046736975" TEXT="prüfen ob machbar">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683046739175" ID="ID_281973034" MODIFIED="1683046935676" TEXT="Operationen abstrahieren (λ)">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1683046771373" ID="ID_668314224" MODIFIED="1683046786020" TEXT="getStart(elm)"/>
|
||||
<node CREATED="1683046786608" ID="ID_106487591" MODIFIED="1683046790142" TEXT="getEnd(elm)"/>
|
||||
<node CREATED="1683046813031" ID="ID_1700011975" MODIFIED="1683046820577" TEXT="clone(elm, start, after)"/>
|
||||
<node CREATED="1683046837473" ID="ID_1325886464" MODIFIED="1683046842188" TEXT="build(start, after)"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683046873340" ID="ID_347563039" MODIFIED="1683046933949" TEXT="Template Parameter deduction einrichten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683046958233" ID="ID_226373762" MODIFIED="1683047000567" TEXT="isoliert testbar machen">
|
||||
<arrowlink COLOR="#e31dc4" DESTINATION="ID_1714211009" ENDARROW="Default" ENDINCLINATION="-141;9;" ID="Arrow_ID_816334190" STARTARROW="None" STARTINCLINATION="-192;20;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1682993091685" ID="ID_988617455" MODIFIED="1682993099148" TEXT="systematische Testabdeckung">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
|
|
@ -70148,6 +70219,102 @@
|
|||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1682993108314" ID="ID_317827435" MODIFIED="1682993122827" TEXT="hinzu kommt die Variante, daß leere Intervalle zusammengeführt werden"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683046966788" ID="ID_1714211009" MODIFIED="1683046994438" TEXT="splitSplice-Algo isoliert testen">
|
||||
<linktarget COLOR="#e31dc4" DESTINATION="ID_1714211009" ENDARROW="Default" ENDINCLINATION="-141;9;" ID="Arrow_ID_816334190" SOURCE="ID_226373762" STARTARROW="None" STARTINCLINATION="-192;20;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047015402" ID="ID_1729864005" MODIFIED="1683047024304" TEXT="Segmentation-Fälle">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047146727" ID="ID_1666065871" MODIFIED="1683047163542" TEXT="Seg in leer">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1683047212062" ID="ID_378627927" MODIFIED="1683047503858" TEXT="Seg in Seg">
|
||||
<arrowlink COLOR="#eee6fe" DESTINATION="ID_1715234114" ENDARROW="Default" ENDINCLINATION="-40;-6;" ID="Arrow_ID_821049970" STARTARROW="None" STARTINCLINATION="24;45;"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047231372" ID="ID_393126179" MODIFIED="1683047261696" TEXT="SegN < Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047290932" ID="ID_1714332119" MODIFIED="1683047352056" TEXT="links disjunkt">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047302426" ID="ID_255724966" MODIFIED="1683047352062" TEXT="links bündig">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047312185" ID="ID_361978590" MODIFIED="1683047352063" TEXT="links überlapp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047321800" ID="ID_750704841" MODIFIED="1683047352063" TEXT="links in-bündig">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047329359" ID="ID_1715234114" MODIFIED="1683047482325" TEXT="komplett in">
|
||||
<linktarget COLOR="#eee6fe" DESTINATION="ID_1715234114" ENDARROW="Default" ENDINCLINATION="-40;-6;" ID="Arrow_ID_821049970" SOURCE="ID_378627927" STARTARROW="None" STARTINCLINATION="24;45;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047333150" ID="ID_1160806927" MODIFIED="1683047352064" TEXT="rechts in-bündig">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047338246" ID="ID_74223802" MODIFIED="1683047352064" TEXT="rechts überlapp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047342461" ID="ID_70002710" MODIFIED="1683047352065" TEXT="rechts bündig">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047345829" ID="ID_115418057" MODIFIED="1683047352065" TEXT="rechts disjunkt">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047262589" ID="ID_1007407171" MODIFIED="1683047281376" TEXT="SegN ≙ Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047391246" ID="ID_79897442" MODIFIED="1683047397776" TEXT="komplett ersetzend">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047282261" ID="ID_972492925" MODIFIED="1683047287612" TEXT="SegN > Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047421234" ID="ID_34267753" MODIFIED="1683047448083" TEXT="links überlapp rechts in-bündig">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047431779" ID="ID_867118469" MODIFIED="1683047448083" TEXT="komplett überdeckend">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047436312" ID="ID_178416593" MODIFIED="1683047448084" TEXT="links in-bündig rechts überlapp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047063010" ID="ID_1521759912" MODIFIED="1683047144754" TEXT="degenerierte Fälle">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047076545" ID="ID_1043278799" MODIFIED="1683047109765" TEXT="weder Start noch Ende ⟹ NOP">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047111300" ID="ID_592313563" MODIFIED="1683047141649" TEXT="Ende vor Start ⟹ flip">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047568998" ID="ID_717909997" MODIFIED="1683047593595" TEXT="nur Start in leer">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047600842" ID="ID_1296939767" MODIFIED="1683047604778" TEXT="nur Ende in leer">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047624559" ID="ID_1509703991" MODIFIED="1683047708973" TEXT="nur Start in Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047654979" ID="ID_1521058039" MODIFIED="1683047708973" TEXT="nur Ende in Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047688030" ID="ID_1363163343" MODIFIED="1683047708974" TEXT="nur Start vor Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047693102" ID="ID_848292031" MODIFIED="1683047708974" TEXT="nur Ende vor Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047697837" ID="ID_1072007349" MODIFIED="1683047708975" TEXT="nur Start nach Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683047704284" ID="ID_695991119" MODIFIED="1683047708975" TEXT="nur Ende nach Seg">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1682627621082" ID="ID_1110039315" MODIFIED="1682948822157" TEXT="ein Segment hinzufügen">
|
||||
|
|
|
|||
Loading…
Reference in a new issue