A.3 Measure Klassenreferenz 227 Event ∗ event (const Rational & attack) const Liefert einen Zeiger auf einen Event (S. 220) mit bestimmter Einsatzzeit zurück. Der erste Event (S. 220) im Takt besitzt die Einsatzzeit 0, alle weiteren ergeben sich aus der Summe der vorangehenden Event (S. 220)-Daueren. Parameter: attack die gewünschte musikalische Einsatzzeit Rückgabe: Zeiger auf den zugehörigen Event (S. 220). Falls kein Event (S. 220) mit an-gegebener Einsatzzeit vorhanden ist, wird 0 zurückgegeben. { Rational sum = 0; // aktuelle Einsatzzeit for (ConstIterator i=l_events.begin(); i!=l_events.end(); ++i) { if (sum == attack) // Event gefunden? return ∗i; else if (sum > attack) // nicht gefunden? return 0; sum += (∗i)→duration().abs(); // nächste Einsatzzeit } return 0; } void fit () [protected] Paßt den Takt, falls nötig, an die aktuelle Taktart an. Falls der aktuelle Takt zu viele oder zu wenige Events enthält (abhängig von der gewählten Taktart) werden die Events angepaßt. Überzählige Events werden am Taktende abgeschnitten, ein unvollständig gefgüllter Takt wird am Ende mit Pau-sen aufgefüllt. { if (l_events.empty()) // Takt leer? return; // dann gibt’s nichts zu tun Rational duration = 0; Iterator i = l_events.begin(); while (i != l_events.end() && duration ≤ c_time_sig) duration += (∗i++)→duration().abs(); if (duration == c_time_sig) // Takt vollständig gefüllt? return; // dann, gibt’ s ebenfalls nichts zu tun Event ∗ev; if (duration > c_time_sig) // zu viele Events im Takt? { duration −= (∗−−i)→duration().abs();