]> git.donarmstrong.com Git - lilypond.git/blob - lily/music-list.cc
release: 1.1.43
[lilypond.git] / lily / music-list.cc
1 /*
2   music-list.cc -- implement Music_sequence, Simultaneous_music, Sequential_music
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9 #include "music-list.hh"
10 #include "musical-pitch.hh"
11 #include "request.hh"
12 #include "musical-request.hh"
13 #include "main.hh"
14 #include "killing-cons.tcc"
15
16 Moment
17 Simultaneous_music::length_mom () const
18 {
19   return maximum_length ();
20 }
21
22
23
24 void
25 Music_sequence::compress (Moment m)
26 {
27   for (Cons<Music> *i = music_p_list_p_->head_; i;  i = i->next_)
28     i->car_->compress (m);
29 }
30
31 Simultaneous_music::Simultaneous_music(Music_list *p)
32   : Music_sequence (p)
33 {
34
35 }
36
37 Sequential_music::Sequential_music(Music_list *p)
38   : Music_sequence (p)
39 {
40 }
41
42 Moment
43 Sequential_music::length_mom () const
44 {
45   return cumulative_length ();
46 }
47
48
49 Musical_pitch
50 Simultaneous_music::to_relative_octave (Musical_pitch p)
51 {
52   return do_relative_octave (p, true);
53 }
54
55 Musical_pitch
56 Music_sequence::do_relative_octave (Musical_pitch p, bool b)
57 {
58   return music_p_list_p_->do_relative_octave (p, b);  
59 }
60
61 Musical_pitch 
62 Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
63 {
64   Musical_pitch retval;
65   int count=0;
66   for (Cons<Music> *i = head_; i ; i = i->next_)
67     {
68       last = i->car_->to_relative_octave (last);
69       if (!count ++ )
70         retval = last;
71     }
72
73   if (!ret_first)
74     retval = last;
75   
76   return retval;
77 }
78
79
80 Music_list::Music_list (Music_list const &s)
81   : Cons_list<Music> (s)
82 {
83   Cons_list<Music>::init ();
84   clone_killing_cons_list (*this, s.head_);
85 }
86
87
88 void
89 Music_list::add_music (Music*m_p)
90 {
91   if (!m_p)
92     return;
93
94   append (new Killing_cons<Music> (m_p, 0));
95 }
96
97 Request_chord::Request_chord()
98   : Simultaneous_music (new Music_list)
99 {
100 }
101
102
103 Musical_pitch
104 Request_chord::to_relative_octave (Musical_pitch last)
105 {
106   for (Cons<Music> *i = music_p_list_p_->head_; i ; i = i->next_)
107     {
108       if (Melodic_req *m= dynamic_cast <Melodic_req *> (i->car_))
109         {
110           Musical_pitch &pit = m->pitch_;
111           pit.to_relative_octave (last);
112           return pit;
113         }
114     }
115   return last;
116 }
117
118
119 Music_list::Music_list ()
120 {
121 }