]> git.donarmstrong.com Git - lilypond.git/blob - src/timedescription.cc
459c15a06de8a2592e737210d289ba84e3d552d8
[lilypond.git] / src / timedescription.cc
1 #include "timedescription.hh"
2 #include "debug.hh"
3
4 void
5 Time_description::print() const
6 {    
7     mtor << "Time_description { at "<<when<<'\n'; 
8     mtor << "meter " << whole_per_measure << ":" << 1/one_beat 
9          << "\nposition "<< bars << ":" << whole_in_measure <<"\n}\n";
10 }
11 void
12 Time_description::OK() const
13 {
14     assert(whole_in_measure < whole_per_measure && 0 <= whole_in_measure);
15     assert(one_beat);
16 }
17 Time_description::Time_description(Moment dt, Time_description const *prev)
18 {
19     if (prev) {
20         assert(dt >0);
21         *this = *prev;
22         when += + dt;
23         whole_in_measure += dt;
24         while ( whole_in_measure >= whole_per_measure ) {
25             whole_in_measure -= whole_per_measure;
26             bars ++;
27         }
28     } else {                            // default 4/4
29         whole_per_measure = 1;
30         whole_in_measure =0;
31         one_beat = 0.25;
32         when = 0.0;
33         bars = 0;
34     }   
35 }
36
37 void
38 Time_description::set_meter(int l, int o)
39 {
40     assert(o);
41     one_beat = 1/Moment(o);
42     whole_per_measure = Moment(l) * one_beat;
43 }
44
45 void
46 Time_description::setpartial(Moment p)
47 {
48     if (when)
49         error_t ("Partial measure only allowed at beginning.", when);
50     if (p<0||p > whole_per_measure)
51         error_t ("Partial measure has incorrect size", when);
52     whole_in_measure = whole_per_measure - p;
53 }
54 Moment
55 Time_description::barleft()
56 {
57 return    whole_per_measure-whole_in_measure;
58 }