1 #include "timedescription.hh"
4 Time_description::str()const
6 String s( "Time_description { ");
7 s+=String( " cadenza: ") + cadenza_b_ + " at ";
9 s+="\nmeter " + String(whole_per_measure/one_beat) +":" +(1/one_beat);
10 s+= "\nposition "+String( bars) + ":"+ whole_in_measure +"\n}\n";
15 Time_description::print() const
20 Time_description::OK() const
24 assert(whole_in_measure < whole_per_measure);
25 assert(0 <= whole_in_measure);
31 Time_description::set_cadenza(bool b)
33 if (cadenza_b_ && !b) {
34 if (whole_in_measure) {
42 Time_description::Time_description(Moment dt, Time_description const *prev)
48 whole_in_measure += dt;
50 while ( !cadenza_b_ && whole_in_measure >= whole_per_measure ) {
51 whole_in_measure -= whole_per_measure;
54 } else { // default 4/4
55 whole_per_measure = 1;
65 Time_description::set_meter(int l, int o)
68 one_beat = 1/Moment(o);
69 whole_per_measure = Moment(l) * one_beat;
71 error_t("Meterchange should be at start of measure", *this);
75 Time_description::setpartial(Moment p)
78 error_t ("Partial measure only allowed at beginning.", *this);
79 if (p<0||p > whole_per_measure)
80 error_t ("Partial measure has incorrect size", *this);
81 whole_in_measure = whole_per_measure - p;
85 Time_description::barleft()
88 return whole_per_measure-whole_in_measure;
92 Time_description::compare(Time_description &t1, Time_description&t2)
94 int i = sign(t1.when-t2.when);
97 assert(t1.bars==t2.bars);
98 assert(t1.one_beat == t2.one_beat);
99 assert(t1.whole_in_measure == t2.whole_in_measure);
100 assert(t1.whole_per_measure == t2.whole_per_measure);