lilypond-0.1.56
[lilypond.git] / lily / music-list.cc
blob93a64e6a014703140eb77d7011f87c3b70ce30ee
1 /*
2 music-list.cc -- implement Music_list, Chord, Voice
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
10 #include <limits.h>
11 #include "music.hh"
12 #include "debug.hh"
13 #include "music-list.hh"
15 Music_list::Music_list (Music_list const&s)
16 : Music (s)
18 multi_level_i_ = s.multi_level_i_;
19 for (iter (s.music_p_list_.top(), i); i.ok (); i++)
20 add (i->clone());
23 IMPLEMENT_IS_TYPE_B1(Music_list, Music);
24 IMPLEMENT_IS_TYPE_B1(Voice,Music_list);
25 IMPLEMENT_IS_TYPE_B1(Chord,Music_list);
27 MInterval
28 Chord::time_int() const
30 MInterval m;
31 for (iter (music_p_list_.top(), i); i.ok (); i++)
32 m.unite (i->time_int());
34 return m;
37 void
38 Chord::translate (Moment m)
40 for (iter (music_p_list_.top(), i); i.ok (); i++)
41 i->translate (m);
44 Chord::Chord()
49 Voice::Voice()
51 offset_mom_ =0;
54 MInterval
55 Voice::time_int() const
57 Moment last=0;
58 for (iter (music_p_list_.top(), i); i.ok (); i++)
60 MInterval interval = i->time_int();
63 c4 <> c4
65 if (!interval.empty_b())
66 last += interval.length();
68 return offset_mom_ + MInterval (0,last);
71 void
72 Voice::translate (Moment dt)
74 offset_mom_ += dt;
78 Music_list::Music_list()
80 multi_level_i_ = 0;
83 void
84 Music_list::add (Music*m_p)
86 if (!m_p)
87 return;
89 m_p->parent_music_l_ = this;
90 music_p_list_.bottom().add (m_p);
93 void
94 Music_list::transpose (Melodic_req const*rq)
96 for (iter (music_p_list_.top(),i); i.ok (); i++)
97 i->transpose (rq);
100 void
101 Music_list::do_print() const
103 #ifndef NPRINT
104 for (iter (music_p_list_.top(),i); i.ok (); i++)
105 i->print();
106 #endif
109 IMPLEMENT_IS_TYPE_B1(Request_chord, Chord);
112 Request_chord::Request_chord()
114 multi_level_i_ =0;