source file of the GNU LilyPond music typesetter
- (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "music-list.hh"
+#include "music-wrapper.hh"
#include "musical-pitch.hh"
#include "request.hh"
#include "musical-request.hh"
+#include "music-iterator.hh"
#include "main.hh"
+#include "killing-cons.tcc"
Moment
Simultaneous_music::length_mom () const
{
- Moment dur = 0;
- for (iter (music_p_list_p_->top(), i); i.ok (); i++)
- dur = dur >? i->length_mom ();
-
- return dur;
+ return maximum_length ();
}
+
void
Music_sequence::compress (Moment m)
{
- for (PCursor<Music*> i(music_p_list_p_->top()); i.ok (); i++)
- i->compress (m);
+ for (Cons<Music> *i = music_p_list_p_->head_; i; i = i->next_)
+ i->car_->compress (m);
}
Simultaneous_music::Simultaneous_music(Music_list *p)
Moment
Sequential_music::length_mom () const
{
- Moment last=0;
- for (iter (music_p_list_p_->top(), i); i.ok (); i++)
- {
- last += i->length_mom ();
- }
- return last;
-}
-
-Musical_pitch
-Sequential_music::to_relative_octave (Musical_pitch p)
-{
- return do_relative_octave (p, false);
+ return cumulative_length ();
}
Musical_pitch
return do_relative_octave (p, true);
}
+
Musical_pitch
Music_sequence::do_relative_octave (Musical_pitch p, bool b)
{
return music_p_list_p_->do_relative_octave (p, b);
}
+
Musical_pitch
Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
{
Musical_pitch retval;
int count=0;
- for (PCursor<Music*> i (top ()); i.ok (); i++)
+ for (Cons<Music> *i = head_; i ; i = i->next_)
{
- last = i->to_relative_octave (last);
+ last = i->car_->to_relative_octave (last);
if (!count ++ )
retval = last;
}
- // hmmm
-#if 0
- if (!ret_first && find_old_relative_b)
- {
- PCursor<Music*> b (bottom ());
-
- if (b.ok ())
- {
- String w = _("\\relative mode changed here, old value: ");
- w += last.str ();
-
- b->warning (w);
- retval = last;
- }
- }
-
-#endif
if (!ret_first)
retval = last;
Music_list::Music_list (Music_list const &s)
- : Pointer_list<Music*> ()
+ : Cons_list<Music> (s), Input (s)
{
- for (PCursor<Music*> i(s.top()); i.ok (); i++)
- add_music (i->clone());
+ Cons_list<Music>::init ();
+ clone_killing_cons_list (*this, s.head_);
}
+
void
Music_list::add_music (Music*m_p)
{
if (!m_p)
return;
- bottom().add (m_p);
+ append (new Killing_cons<Music> (m_p, 0));
}
-
-
-
-
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++)
+ for (Cons<Music> *i = music_p_list_p_->head_; i ; i = i->next_)
{
- if (Melodic_req *m= dynamic_cast <Melodic_req *> (i.ptr ()))
+ if (Melodic_req *m= dynamic_cast <Melodic_req *> (i->car_))
{
Musical_pitch &pit = m->pitch_;
pit.to_relative_octave (last);
Music_list::Music_list ()
- : Pointer_list<Music*> ()
{
}
+
+Music_sequence::~Music_sequence ()
+{
+ delete music_p_list_p_;
+}