]> git.donarmstrong.com Git - lilypond.git/blob - lily/music-list.cc
release: 0.1.7
[lilypond.git] / lily / music-list.cc
1 /*
2   music-list.cc -- implement Music_list, Chord, Voice
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9
10 #include <limits.h>
11 #include "music.hh"
12 #include "debug.hh"
13 #include "music-list.hh"
14
15 Music_list::Music_list(Music_list const&s)
16     : Music(s)
17 {
18     multi_level_i_ = s.multi_level_i_;   
19     for (iter(s.music_p_list_.top(), i); i.ok(); i++)
20         add(i->clone());
21 }
22
23 IMPLEMENT_IS_TYPE_B1(Music_list, Music);
24 IMPLEMENT_IS_TYPE_B1(Voice,Music_list);
25 IMPLEMENT_IS_TYPE_B1(Chord,Music_list);
26
27 MInterval
28 Chord::time_int()const
29 {
30     MInterval m;
31     for (iter(music_p_list_.top(), i); i.ok(); i++)
32         m.unite(i->time_int());
33
34     return m;
35 }
36
37 void
38 Chord::translate(Moment m)
39 {
40     for (iter(music_p_list_.top(), i); i.ok(); i++)
41         i->translate(m); 
42 }
43
44 Chord::Chord()
45 {
46
47 }
48
49 Voice::Voice()
50 {
51     offset_mom_ =0;
52 }
53
54 MInterval
55 Voice::time_int() const
56 {
57     Moment last=0;
58     for (iter(music_p_list_.top(), i); i.ok(); i++) {
59         MInterval interval = i->time_int();
60         
61         /*
62           c4 <> c4
63         */
64         if ( !interval.empty_b() )
65             last += interval.length();
66     }
67     return  offset_mom_ + MInterval(0,last);
68 }
69
70 void
71 Voice::translate(Moment dt)
72 {
73     offset_mom_ += dt;
74 }
75
76
77 Music_list::Music_list()
78 {
79     multi_level_i_ = 0;
80 }
81
82 void
83 Music_list::add(Music*m_p)
84 {
85     if (!m_p)
86         return;
87
88     m_p->parent_music_l_ = this;
89     music_p_list_.bottom().add(m_p);
90 }
91
92 void
93 Music_list::transpose(Melodic_req const*rq)
94 {
95     for (iter(music_p_list_.top(),i); i.ok(); i++)
96         i->transpose(rq);    
97 }
98
99 void
100 Music_list::do_print()const
101 {
102 #ifndef NPRINT
103     for (iter(music_p_list_.top(),i); i.ok(); i++)
104         i->print();
105 #endif 
106 }
107
108 IMPLEMENT_IS_TYPE_B1(Request_chord, Chord);
109
110
111 Request_chord::Request_chord()
112 {
113     multi_level_i_ =0;
114 }