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