#ifndef tdes_HH
#define tdes_HH
-#include "real.hh"
#include "moment.hh"
/// full info on where we are
struct Time_description {
- Moment when;
+ Moment when_;
/// if true, no bars needed, no reduction of whole_in_measure
bool cadenza_b_;
/// current measure info
- Moment whole_per_measure;
+ Moment whole_per_measure_;
/// where am i
- Moment whole_in_measure;
+ Moment whole_in_measure_;
/// how long is one beat?
- Moment one_beat;
+ Moment one_beat_;
/// idem
- int bars;
+ int bars_i_;
/* *************** */
void set_cadenza(bool);
void OK() const;
- Time_description(Moment, const Time_description*);
+ Time_description();
+ void add(Moment dt);
String str()const;
void print() const;
void setpartial(Moment p);
if (cadenza_b_)
s+=String( " (cadenza) ");
s+= "at ";
- s+=when;
- s+="\nmeter " + String(whole_per_measure/one_beat) +":" +
- String(Rational(Rational(1)/one_beat));
- s+= "\nposition "+String( bars) + ":"+ whole_in_measure +"\n}\n";
+ s+=when_;
+ s+="\nmeter " + String(whole_per_measure_/one_beat_) +":" +
+ String(Rational(Rational(1)/one_beat_));
+ s+= "\nposition "+String( bars_i_) + ":"+ whole_in_measure_ +"\n}\n";
return s;
}
{
#ifdef NDEBUG
if (!cadenza_b_)
- assert(whole_in_measure < whole_per_measure);
- assert(0 <= whole_in_measure);
- assert(one_beat);
+ assert(whole_in_measure_ < whole_per_measure_);
+ assert(0 <= whole_in_measure_);
+ assert(one_beat_);
#endif
}
Time_description::set_cadenza(bool b)
{
if (cadenza_b_ && !b) {
- if (whole_in_measure) {
- bars ++;
- whole_in_measure = 0;
+ if (whole_in_measure_) {
+ bars_i_ ++;
+ whole_in_measure_ = 0;
}
}
cadenza_b_ = b ;
}
-Time_description::Time_description(Moment dt, Time_description const *prev)
+Time_description::Time_description()
{
- if (prev) {
- assert(dt >= Rational(0));
- *this = *prev;
- when += dt;
- whole_in_measure += dt;
+ whole_per_measure_ = 1;
+ whole_in_measure_ =0;
+ one_beat_ = Moment(1,4);
+ when_ = 0;
+ bars_i_ = 0;
+ cadenza_b_ = false;
+}
+void
+Time_description::add(Moment dt)
+{
+ assert(dt >= Rational(0));
+ when_ += dt;
+ whole_in_measure_ += dt;
- while ( !cadenza_b_ && whole_in_measure >= whole_per_measure ) {
- whole_in_measure -= whole_per_measure;
- bars ++;
- }
- } else { // default 4/4
- whole_per_measure = 1;
- whole_in_measure =0;
- one_beat = Moment(1,4);
- when = 0.0;
- bars = 0;
- cadenza_b_ = false;
+ while ( !cadenza_b_ && whole_in_measure_ >= whole_per_measure_ ) {
+ whole_in_measure_ -= whole_per_measure_;
+ bars_i_ ++;
}
}
Time_description::set_meter(int l, int o)
{
assert(o);
- one_beat = Rational(1)/Moment(o);
- whole_per_measure = Moment(l) * one_beat;
- if(whole_in_measure)
+ 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);
}
void
Time_description::setpartial(Moment p)
{
- if (when)
+ if (when_)
error_t ("Partial measure only allowed at beginning.", *this);
- if (p<Rational(0)||p > whole_per_measure)
+ if (p<Rational(0)||p > whole_per_measure_)
error_t ("Partial measure has incorrect size", *this);
- whole_in_measure = whole_per_measure - p;
+ whole_in_measure_ = whole_per_measure_ - p;
}
Moment
Time_description::barleft()
{
assert(!cadenza_b_);
- return whole_per_measure-whole_in_measure;
+ return whole_per_measure_-whole_in_measure_;
}
int
Time_description::compare(Time_description &t1, Time_description&t2)
{
- int i = sign(t1.when-t2.when);
+ int i = sign(t1.when_-t2.when_);
if (!i) {
- assert(t1.bars==t2.bars);
- assert(t1.one_beat == t2.one_beat);
- assert(t1.whole_in_measure == t2.whole_in_measure);
- assert(t1.whole_per_measure == t2.whole_per_measure);
+ assert(t1.bars_i_==t2.bars_i_);
+ assert(t1.one_beat_ == t2.one_beat_);
+ assert(t1.whole_in_measure_ == t2.whole_in_measure_);
+ assert(t1.whole_per_measure_ == t2.whole_per_measure_);
}
return i;