2 music-sequence.cc -- implement Music_sequence
4 source file of the GNU LilyPond music typesetter
6 (c) 1998--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "music-list.hh"
11 #include "musical-pitch.hh"
15 Music_sequence::truncate (int k)
17 SCM l = get_mus_property ("list");
26 for (; gh_pair_p (s) && k--; s = gh_cdr (s))
31 gh_set_cdr_x (s, SCM_EOL);
34 set_mus_property ("list", l);
38 Music_sequence::music_list ()const
40 return get_mus_property ("list");
44 Ugh this sucks. Linear. do not use.
47 Music_sequence::append_music (Music *m)
49 set_mus_property ("list",
50 gh_append2( music_list(), gh_cons (m->self_scm_, SCM_EOL)));
52 Music_sequence::Music_sequence(SCM h)
54 set_mus_property ("list", h);
58 Music_sequence::transpose (Musical_pitch rq)
60 for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
61 unsmob_music (gh_car (s))->transpose (rq);
65 Music_sequence::do_print() const
68 for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
69 unsmob_music (gh_car (s))->print();
76 Music_sequence::cumulative_length () const
79 for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
80 last += unsmob_music (gh_car (s))->length_mom ();
85 Music_sequence::to_relative_octave (Musical_pitch p)
87 return do_relative_octave (p, false);
92 Music_sequence::maximum_length () const
95 for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
96 dur = dur >? unsmob_music (gh_car (s))->length_mom ();
101 Music_sequence::length_i () const
103 return scm_ilength (music_list ());
107 Music_sequence::do_relative_octave (Musical_pitch p, bool ret_first)
109 Musical_pitch retval;
112 Musical_pitch last = p;
113 for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
115 last = unsmob_music (gh_car (s))->to_relative_octave (last);
127 Music_sequence::compress (Moment m)
129 for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
130 unsmob_music (gh_car (s))->compress (m);