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