2 time-description.cc -- implement Time_description
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 #include "time-description.hh"
13 Time_description::str()const
15 String s( "Time_description { ");
17 s+=String( " (cadenza) ");
20 s+="\nmeter " + String(whole_per_measure_/one_beat_) +":" +
21 String(Rational(Rational(1)/one_beat_));
22 s+= "\nposition "+String( bars_i_) + ":"+ whole_in_measure_ +"\n}\n";
27 Time_description::print() const
34 Time_description::OK() const
38 assert(whole_in_measure_ < whole_per_measure_);
39 assert(Moment(0) <= whole_in_measure_);
45 Time_description::set_cadenza(bool b)
47 if (cadenza_b_ && !b) {
48 if (whole_in_measure_) {
49 bars_i_ ++; // should do?
50 whole_in_measure_ = 0;
56 Time_description::Time_description()
59 whole_per_measure_ = 1;
61 one_beat_ = Moment(1,4);
68 Time_description::add(Moment dt)
70 assert(dt >= Rational(0));
72 whole_in_measure_ += dt;
74 while ( !cadenza_b_ && whole_in_measure_ >= whole_per_measure_ ) {
75 whole_in_measure_ -= whole_per_measure_;
81 Time_description::set_meter(int l, int o)
84 one_beat_ = Rational(1)/Moment(o);
85 whole_per_measure_ = Moment(l) * one_beat_;
89 Time_description::allow_meter_change_b()
91 return!(whole_in_measure_);
95 retrieve error messages.
97 error messages if not possible, "" if possible
100 Time_description::try_set_partial_str(Moment p)const
103 return ("Partial must be non-negative");
104 if (p > whole_per_measure_)
105 return ("Partial measure too large");
110 Time_description::setpartial(Moment p)
112 whole_in_measure_ = whole_per_measure_ - p;
116 Time_description::barleft()const
119 return whole_per_measure_-whole_in_measure_;
123 Time_description::compare(Time_description const &t1, Time_description const&t2)
125 int i = sign(t1.when_-t2.when_);
128 assert(t1.bars_i_==t2.bars_i_);
129 assert(t1.one_beat_ == t2.one_beat_);
130 assert(t1.whole_in_measure_ == t2.whole_in_measure_);
131 assert(t1.whole_per_measure_ == t2.whole_per_measure_);
138 Time_description::next_bar_moment() const
140 return when_ + barleft();