228 Dokumentation des Programmoduls RhythmClarifier ev = (∗i)→create(c_time_sig−duration); remove_events(i, l_events.end()); // überzählige Events löschen } else // Takt nicht vollständig gefüllt ? ev = new Rest(c_time_sig−duration); // mit Pausen auffüllen l_events.push_back(ev); } void merge_events (const Rational & attack, int n) Diese Funktion verschmilzt mehrere aufeinanderfolgende Events. Unabhängig vom Typ der Ereignisse werden beginnend bei der angegebenen Ein-satzzeit n aufeinanderfolgende Events verschmolzen. Der Typ des resultierenden Ereignisses entspricht dem Typ des Events auf der angegebenen Einsatzzeit. Parameter: attack Einsatzzeit des ersten zu berücksichtigen Events n Anzahl der zu verschmelzenden Events { if (n == 0) return; Rational sum = 0; // aktuelle Einsatzzeit Iterator start = l_events.begin(); // bis zum Event mit Einsatzzeit ’attack’ vorrücken while (start != l_events.end() && sum < attack) ++start; // falls gewünschter Event nicht existiert , fertig if (sum > attack || start == l_events.end()) return; // Dauer des neuen Events bestimmen sum = 0; Iterator end = start; for (; n > 0 && end != l_events.end(); n−−) sum += (∗end++)→duration().abs(); // neuen Event in den Takt einfügen und alte Sequenz löschen l_events. insert ( start , (∗ start )→create(sum)); remove_events(start, end); } void merge_events () Diese Funktion verschmilzt mehrere Ereignisse zu einem Event (S. 220) mit grö-ßerer Dauer. Mehrere aufeinanderfolgende Pausen oder mehrere mit Haltebögen versehene Noten können zu einem einzigen, größeren Ereignis gleichen Typs zusammengefaßt wer-den. Genau dies leistet die Funktion für alle möglichen Noten- und Pausenfolgen.