]> git.donarmstrong.com Git - lilypond.git/blob - lily/duration.cc
release: 1.3.18
[lilypond.git] / lily / duration.cc
1 /*
2   duration.cc -- implement Duration, Plet, 
3
4   source file of the LilyPond music typesetter
5
6   (c)  1997--1999 Jan Nieuwenhuizen <janneke@gnu.org>
7            Han-Wen Nienhuys <hanwen@cs.uu.nl>
8
9 */
10
11 #include <assert.h>
12
13 #include "lily-proto.hh"
14 #include "string.hh"
15 #include "moment.hh"
16 #include "duration.hh"
17
18 Duration::Duration ()
19 {
20   durlog_i_ = 0;
21   dots_i_ = 0;
22   tuplet_iso_i_ = 1;
23   tuplet_type_i_ = 1;
24 }
25
26 void
27 Duration::compress (Rational m)
28 {
29   tuplet_iso_i_  *= m.num_i ();
30   tuplet_type_i_ *= m.den_i (); 
31 }
32
33 Rational
34 Duration::length_mom () const
35 {
36   Rational mom (1 << abs (durlog_i_));
37
38   if (durlog_i_> 0)
39     mom = Moment (1)/mom;
40
41   Rational delta = mom;
42
43   for (int d = dots_i_; d; d--)
44     {
45       delta /= Moment (2);
46       mom += delta;
47     }
48
49   return mom * Moment (tuplet_iso_i_, tuplet_type_i_);
50 }
51
52 void
53 Duration::set_plet (int i, int t)
54 {
55   tuplet_iso_i_ = i; 
56   tuplet_type_i_ = t;
57 }
58
59
60 String
61 Duration::str () const
62 {
63   return to_str (durlog_i_) + to_str ('.', dots_i_);
64 }
65
66
67 bool
68 Duration::plet_b ()
69 {
70   return tuplet_iso_i_ != 1 || tuplet_type_i_ != 1;
71 }
72
73