A.3 Measure Klassenreferenz 229 Diese Funktionalität wird für den RhythmClarifier (S. 252) benötigt: bevor die optische Aufbereitung beginnt, werden alle möglichen (ggf. vom Anwender falsch zerlegte) Ereignisfolgen verschmolzen und anschließend korrekt zerlegt. { if (l_events.empty()) // Takt leer? return; Iterator first = l_events.begin (); // Zeiger auf pot. Sequenzanfang Rational sum = (∗first)→duration().abs(); // Einsatzzeit Iterator curr = first ; // Zeiger auf akt . Event do { Iterator prev = curr++; // Zeiger auf Vorgänger // Test auf Verschmelzbarkeit if (curr != l_events.end() && (∗curr)→same_as(∗first) && (∗prev)→is_mergable()) sum += (∗curr)→duration().abs(); else // keine (weitere ) Verschmelzung möglich { if (∗ first != ∗(prev)) // mehr als 1 Event zu verschmelzen? { // neuen, einzelnen Event einfügen und alte Sequenz löschen l_events. insert ( first , (∗ first )→create(sum)); remove_events(first, curr ); } first = curr; if ( first != l_events.end()) sum = (∗first)→duration().abs(); } } while (curr != l_events.end()); } void split (const Rational & time) Zerlegt ein Taktereignis an der angegebenen Einsatzzeit in zwei Teile. Wenn die angegebene Einsatzzeit innerhalb des aktuellen Taktes liegt, wird sie von einer Note (S. 241) oder Pause berührt bzw. eingeschlossen. Ausgehend von letzterem Fall teilt die Zeit die Dauer des betroffenen Ereignisses in zwei Teile. Diese Funktion zerlegt die Note (S. 241) bzw. Pause an der angegebenen Stelle. Parameter: time musikalische Zeit des Spaltpunktes { Rational attack = 0; for ( Iterator i=l_events.begin(); i!=l_events.end(); ++i) { Rational dur = (∗i)→duration().abs(); attack += dur;