]> git.donarmstrong.com Git - lilypond.git/blob - src/inputmusic.cc
release: 0.0.17
[lilypond.git] / src / inputmusic.cc
1 #include "debug.hh"
2 #include "inputmusic.hh"
3 #include "voice.hh"
4
5 void
6 Simple_music::add(Voice_element*v)
7 {
8     voice_.add(v);
9 }
10
11 Real
12 Simple_music::length()
13 {
14     return voice_.last();
15 }
16 void
17 Simple_music::translate_time(Real t)
18 {
19     voice_.start += t;
20 }
21
22 Voice_list
23 Simple_music::convert()
24 {
25     Voice_list l;
26     l.bottom().add(new Voice(voice_));
27     return l;
28 }
29
30
31 void
32 Simple_music::print() const
33 {
34     mtor << "Simple_music {";
35     voice_.print();
36     mtor << "}\n";
37 }
38
39 /****************/
40
41 void
42 Complex_music::add(Input_music*v)
43 {
44     elts.bottom().add(v);
45 }
46
47 void
48 Complex_music::print() const
49 {
50     for (PCursor<Input_music*> i(elts); i.ok(); i++)
51          i->print();
52 }
53
54 void
55 Complex_music::concatenate(Complex_music*h)
56 {
57     for (PCursor<Input_music*> i(h->elts); i.ok(); i++)
58         add(i->clone());    
59 }
60
61 Complex_music::Complex_music()
62 {
63 }
64
65 Complex_music::Complex_music(Complex_music const&s)
66 {
67     for (PCursor<Input_music*> i(s.elts); i.ok(); i++)
68         add(i->clone());
69 }
70
71 /****************************************************************/
72
73 void
74 Music_voice::print() const
75 {
76     mtor << "Music_voice {";
77     Complex_music::print();    
78     mtor << "}\n";
79 }
80
81 void
82 Music_voice::add_elt(Voice_element*v)
83 {
84     PCursor<Input_music*> c(elts.bottom());
85     if (!c.ok() || !c->simple()) {
86         Simple_music*vs = new Simple_music;
87         
88         c.add(vs);
89     }
90     
91     c = elts.bottom();
92     Simple_music *s = c->simple();
93     s->add(v);              
94 }
95
96 Real
97 Music_voice::length()
98 {
99     Real l = 0.0;
100     
101     for (PCursor<Input_music*> i(elts); i.ok(); i++)
102         l += i->length();
103     return l;
104 }
105
106     
107 Voice_list
108 Music_voice::convert()
109 {
110     Voice_list l;
111     Real here = 0.0;
112     
113     for (PCursor<Input_music*> i(elts); i.ok(); i++) {
114         Real len = i->length(); 
115         Voice_list k(i->convert());
116         k.translate_time(here); 
117         l.concatenate(k);
118         here +=len;
119         
120     }
121     return l;    
122 }
123
124 void
125 Music_voice::translate_time(Real t)
126 {
127     elts.bottom()->translate_time(t);
128 }
129
130     
131     
132 /****************/
133
134 void
135 Music_general_chord::add_elt(Voice_element*v)
136 {
137     Simple_music*vs = new Simple_music;
138     vs->add(v);
139     elts.bottom().add(vs);
140 }
141
142 void
143 Music_general_chord::print() const
144 {
145     mtor << "Music_general_chord {";
146     Complex_music::print();
147      mtor << "}\n";
148 }
149
150 void
151 Music_general_chord::translate_time(Real t)
152 {
153     for (PCursor<Input_music*> i(elts); i.ok(); i++) 
154         i->translate_time(t);    
155 }
156
157 Real
158 Music_general_chord::length()
159 {
160     Real l =0.0;
161     
162     for (PCursor<Input_music*> i(elts); i.ok(); i++) 
163         l = l >? i->length();
164     return l;
165 }
166
167 Voice_list
168 Music_general_chord::convert()
169 {
170     Voice_list l;
171     for (PCursor<Input_music*> i(elts); i.ok(); i++) {
172         Voice_list k(i->convert());
173         l.concatenate(k);
174     }
175     return l;
176 }
177
178
179 /****************/
180
181 void
182 Voice_list::translate_time(Real x)
183 {
184     for (PCursor<Voice*> i(*this); i.ok(); i++)
185         i->start += x;    
186 }
187