source file of the GNU LilyPond music typesetter
- (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-
-
#include "music-list.hh"
-#include "musical-pitch.hh"
+#include "music-wrapper.hh"
+#include "pitch.hh"
#include "request.hh"
#include "musical-request.hh"
-
-
-
-
+#include "music-iterator.hh"
+#include "main.hh"
+#include "killing-cons.tcc"
+#include "simultaneous-music-iterator.hh"
+#include "sequential-music-iterator.hh"
+#include "request-chord-iterator.hh"
Moment
-Simultaneous_music::duration () const
+Simultaneous_music::length_mom () const
{
- Moment dur = 0;
- for (iter (music_p_list_p_->top(), i); i.ok (); i++)
- dur = dur >? i->duration ();
-
- return dur;
+ return maximum_length ();
}
-void
-Music_sequence::compress (Moment m)
+Simultaneous_music::Simultaneous_music(SCM head)
+ : Music_sequence (head)
{
- for (PCursor<Music*> i(music_p_list_p_->top()); i.ok (); i++)
- i->compress (m);
+ set_mus_property ("iterator-ctor",
+ Simultaneous_music_iterator::constructor_cxx_function);
}
-Simultaneous_music::Simultaneous_music(Music_list *p)
- : Music_sequence (p)
+Sequential_music::Sequential_music(SCM head)
+ : Music_sequence (head)
{
-
+ set_mus_property ("iterator-ctor",
+ Sequential_music_iterator::constructor_cxx_function);
}
-Sequential_music::Sequential_music(Music_list *p)
- : Music_sequence (p)
-{
-}
Moment
-Sequential_music::duration () const
+Sequential_music::length_mom () const
{
- Moment last=0;
- for (iter (music_p_list_p_->top(), i); i.ok (); i++)
- {
- last += i->duration ();
- }
- return last;
-}
-
-Musical_pitch
-Sequential_music::to_relative_octave (Musical_pitch p)
-{
- return do_relative_octave (p, false);
+ return cumulative_length ();
}
-Musical_pitch
-Simultaneous_music::to_relative_octave (Musical_pitch p)
+Pitch
+Simultaneous_music::to_relative_octave (Pitch p)
{
return do_relative_octave (p, true);
}
-Musical_pitch
-Music_sequence::do_relative_octave (Musical_pitch p, bool b)
+Request_chord::Request_chord(SCM s)
+ : Simultaneous_music (s)
{
- return music_p_list_p_->do_relative_octave (p, b);
+ set_mus_property ("iterator-ctor",
+ Request_chord_iterator::constructor_cxx_function);
}
-Musical_pitch
-Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
+Pitch
+Request_chord::to_relative_octave (Pitch last)
{
- Musical_pitch retval;
- int count=0;
- for (PCursor<Music*> i (top ()); i.ok (); i++)
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
{
- last = i->to_relative_octave (last);
- if (!count ++ )
- retval = last;
- }
- if (!ret_first)
- retval = last;
- return retval;
-}
-
-
-Music_list::Music_list (Music_list const &s)
- : Pointer_list<Music*> ()
-{
- for (PCursor<Music*> i(s.top()); i.ok (); i++)
- add_music (i->clone());
-}
-
-void
-Music_list::add_music (Music*m_p)
-{
- if (!m_p)
- return;
-
- bottom().add (m_p);
-}
-
-
-
-
-
-Request_chord::Request_chord()
- : Simultaneous_music (new Music_list)
-{
-}
-
-
-Musical_pitch
-Request_chord::to_relative_octave (Musical_pitch last)
-{
- for (iter (music_p_list_p_->top(),i); i.ok (); i++)
- {
- if (Melodic_req *m= dynamic_cast <Melodic_req *> (i.ptr ()))
+ Music * mus = unsmob_music (gh_car (s));
+ if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
{
- Musical_pitch &pit = m->pitch_;
+ Pitch pit = *unsmob_pitch (m->get_mus_property ("pitch"));
+
pit.to_relative_octave (last);
+ m->set_mus_property ("pitch", pit.smobbed_copy());
+
return pit;
}
}
}
-Music_list::Music_list ()
- : Pointer_list<Music*> ()
-{
-}
+