218 Dokumentation des Programmoduls RhythmClarifier int split (int dot_limit, list< Duration > & result) const Zerlegt den aktuellen Notenwert in kleinere Bestandteile. Abhängig vom Basiswert und der gewünschten maximalen Wertpunktanzahl muß eine Note (S. 241) bzw. Pause in mehrere kürzere Ereignisse desselben Typs zerlegt werden (vgl. is_simple). Diese Funktion füllt die als Parameter übergebene Liste result mit den errechneten Teildauern. Die größte Dauer bildet den Listenanfang, die kleinste das -ende. Parameter: dot_limit Anzahl der maximal gewünschten Wertpunkte result Diese Liste enthält bei Rückkehr die einzelnen Notenwerte Rückgabe: Anzahl der benötigten Einzelnoten (Anzahl der Listenelemente in result) { int numer = abs().numer(); // Zähler der absoluten Dauer int current = 0; // aktueller Summand d. Zählers int dots = 0; // aktuelle Anzahl der benötigten Wertpunkte int diff = 0; // Differenz der Exponenten while (numer > 0) { int ilog = ilog2(numer); // kann aktueller Zähler durch weiteren Wertpunkt erreicht werden? if (dots < dot_limit && diff == 1) dots++; else // nein , dann neuen Notenwert beginnen { if (current > 0) // schon eine Dauer ermittelt? result .push_back(Duration(Rational(current, r_base.denom()), dots)); current = 1 « ilog ; dots = 0; } numer −= 1 « ilog; diff = ilog − ilog2(numer); } result .push_back(Duration(Rational(current, r_base.denom()), dots)); return result. size (); } A.1.4 Freundbeziehungen und Funktionsdokumentation int bit_run_length (unsigned n) [related] Liefert die Folgenlänge gesetzter Bits einer natürlichen Zahl zurück. Parameter: n die zu untersuchende Zahl