2 time-description.cc -- implement Time_description
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "time-description.hh"
13 Time_description::str () const
15 String s ("Time_description { ");
17 s += String ("(") + _("cadenza") + ")";
20 s +="\ntime_signature " + (whole_per_measure_/one_beat_).str () +":" +
21 (Moment (Moment (1)/one_beat_)).str ();
22 s += "\nposition " + to_str (bars_i_) + ":"+ whole_in_measure_.str () +"\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)
49 if (whole_in_measure_)
51 bars_i_ ++; // should do?
52 whole_in_measure_ = 0;
58 Time_description::Time_description()
60 whole_per_measure_ = 1;
62 one_beat_ = Moment (1,4);
64 bars_i_ = 1; // musician start counting at 1
69 Time_description::add (Moment dt)
71 assert (dt >= Moment (0));
73 whole_in_measure_ += dt;
75 while (!cadenza_b_ && whole_in_measure_ >= whole_per_measure_)
77 whole_in_measure_ -= whole_per_measure_;
83 Time_description::set_time_signature (int l, int o)
86 one_beat_ = Moment (1)/Moment (o);
87 whole_per_measure_ = Moment (l) * one_beat_;
91 Time_description::allow_time_signature_change_b()
93 return!(whole_in_measure_);
97 retrieve error messages.
99 error messages if not possible, "" if possible
102 Time_description::try_set_partial_str (Moment p) const
105 return (_ ("partial measure must be non-negative"));
106 if (p > whole_per_measure_)
107 return (_ ("partial measure too large"));
112 Time_description::setpartial (Moment p)
114 whole_in_measure_ = whole_per_measure_ - p;
118 Time_description::barleft() const
120 assert (!cadenza_b_);
121 return whole_per_measure_-whole_in_measure_;
125 Time_description::compare (Time_description const &t1, Time_description const&t2)
127 int i = sign (t1.when_-t2.when_);
131 assert (t1.bars_i_==t2.bars_i_);
132 assert (t1.one_beat_ == t2.one_beat_);
133 assert (t1.whole_in_measure_ == t2.whole_in_measure_);
134 assert (t1.whole_per_measure_ == t2.whole_per_measure_);
141 Time_description::next_bar_moment() const
143 return when_ + barleft();