/*
time-description.cc -- implement Time_description
- source file of the LilyPond music typesetter
+ source file of the GNU LilyPond music typesetter
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
{
if (cadenza_b_ && !b) {
if (whole_in_measure_) {
- bars_i_ ++;
+ bars_i_ ++; // should do?
whole_in_measure_ = 0;
}
}
Time_description::Time_description()
{
+ error_b_ = false;
whole_per_measure_ = 1;
whole_in_measure_ =0;
one_beat_ = Moment(1,4);
assert(o);
one_beat_ = Rational(1)/Moment(o);
whole_per_measure_ = Moment(l) * one_beat_;
- if(whole_in_measure_)
- error_t("Meterchange should be at start of measure", *this);
+}
+
+bool
+Time_description::allow_meter_change_b()
+{
+ return!(whole_in_measure_);
+}
+
+/**
+ retrieve error messages.
+ @return
+ error messages if not possible, "" if possible
+ */
+String
+Time_description::try_set_partial_str(Moment p)const
+{
+ if (p<Rational(0))
+ return ("Partial must be non-negative");
+ if (p > whole_per_measure_)
+ return ("Partial measure too large");
+ return "";
}
void
Time_description::setpartial(Moment p)
{
- if (when_)
- error_t ("Partial measure only allowed at beginning.", *this);
- if (p<Rational(0)||p > whole_per_measure_)
- error_t ("Partial measure has incorrect size", *this);
whole_in_measure_ = whole_per_measure_ - p;
}
Moment
-Time_description::barleft()
+Time_description::barleft()const
{
assert(!cadenza_b_);
return whole_per_measure_-whole_in_measure_;
}
int
-Time_description::compare(Time_description &t1, Time_description&t2)
+Time_description::compare(Time_description const &t1, Time_description const&t2)
{
int i = sign(t1.when_-t2.when_);
return i;
}
+
+Moment
+Time_description::next_bar_moment() const
+{
+ return when_ + barleft();
+}
+