]> git.donarmstrong.com Git - lilypond.git/blob - lib/duration.cc
patch::: 0.1.8.jcn1: Re: pl 8
[lilypond.git] / lib / duration.cc
1 /*
2   duration.cc -- implement Duration, Plet, 
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
7            Han-Wen Nienhuys <hanwen@stack.nl>
8 */
9
10 #include "proto.hh"
11 #include "plist.hh"
12 #include "string.hh"
13 #include "source-file.hh"
14 #include "source.hh"
15 #include "moment.hh"
16 #include "duration.hh"
17 #include "duration-convert.hh"
18
19 // statics Duration
20 int Duration::division_1_i_s = 384 * 4;
21
22
23 Duration::Duration()
24 {
25         type_i_ = 1;
26         dots_i_ = 0;
27         ticks_i_ = 0;
28 }
29
30 Duration::Duration( int type_i, int dots_i = 0 )
31 {
32         type_i_ = type_i;
33         dots_i_ = dots_i;
34         ticks_i_ = 0;
35 }
36
37 bool
38 Duration::duration_type_b(int t)
39 {
40     int bit_i=0;
41     while (t > 0)
42     {
43         int rem = t % 2;
44         t /= 2;
45         bit_i += (rem == 1);
46     }
47     return bit_i == 1;
48 }
49
50 // ugh, what's this?
51 // i should be called "mom()", ... or at least "length_mom()"
52 Moment
53 Duration::length() const
54 {
55     return Duration_convert::dur2_mom(*this);
56 }
57
58 void
59 Duration::set_plet(int i, int t)
60 {
61     plet_.iso_i_ = i; 
62     plet_.type_i_ = t;
63 }
64
65 void
66 Duration::set_plet(Duration d)
67 {
68     plet_.iso_i_ = d.plet_.iso_i_; 
69     plet_.type_i_ = d.plet_.type_i_;
70 }
71
72 void
73 Duration::set_ticks( int ticks_i )
74 {
75         assert( !type_i_ );
76         assert( !dots_i_ );
77         ticks_i_ = ticks_i;
78 }
79
80 String
81 Duration::str()const
82 {
83     return Duration_convert::dur2_str(*this);
84 }
85
86 Plet::Plet()
87 {
88     type_i_ = 1;
89     iso_i_ = 1;
90 }
91
92 Moment
93 Plet::mom()const
94 {
95     return  Moment( iso_i_, type_i_ );
96 }
97
98 bool
99 Duration::plet_b()
100 {
101     return !plet_.unit_b();
102 }
103
104 bool
105 Plet::unit_b()const
106 {
107     return type_i_ == 1 && iso_i_ == 1;
108 }
109