X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-list.cc;h=1d32d1d08d4bff3307ed35407352dabee705adc6;hb=d6048913c2c793a6298a3e16a1a25c76711463b1;hp=b9b72ded25d2237249ec15d4e6963c849a3ba8b9;hpb=151617937a431d3db3e94a16db011600acdb4288;p=lilypond.git diff --git a/lily/music-list.cc b/lily/music-list.cc index b9b72ded25..1d32d1d08d 100644 --- a/lily/music-list.cc +++ b/lily/music-list.cc @@ -3,35 +3,29 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ - - #include "music-list.hh" #include "musical-pitch.hh" #include "request.hh" #include "musical-request.hh" +#include "main.hh" +#include "killing-cons.tcc" - -IMPLEMENT_IS_TYPE_B1(Sequential_music,Music_sequence); -IMPLEMENT_IS_TYPE_B1(Simultaneous_music,Music_sequence); - -MInterval -Simultaneous_music::time_int() const +Moment +Simultaneous_music::length_mom () const { - MInterval m; - for (iter (music_p_list_p_->top(), i); i.ok (); i++) - m.unite (i->time_int()); - - return m; + return maximum_length (); } + + void -Simultaneous_music::translate (Moment m) +Music_sequence::compress (Moment m) { - for (iter (music_p_list_p_->top(), i); i.ok (); i++) - i->translate (m); + for (Cons *i = music_p_list_p_->head_; i; i = i->next_) + i->car_->compress (m); } Simultaneous_music::Simultaneous_music(Music_list *p) @@ -43,100 +37,77 @@ Simultaneous_music::Simultaneous_music(Music_list *p) Sequential_music::Sequential_music(Music_list *p) : Music_sequence (p) { - offset_mom_ =0; } -MInterval -Sequential_music::time_int() const +Moment +Sequential_music::length_mom () const { - Moment last=0; - for (iter (music_p_list_p_->top(), i); i.ok (); i++) - { - MInterval interval = i->time_int(); - - /* - c4 <> c4 - */ - if (!interval.empty_b()) - last += interval.length(); - } - return offset_mom_ + MInterval (0,last); + return cumulative_length (); } -Musical_pitch -Sequential_music::to_relative_octave (Musical_pitch p) -{ - return music_p_list_p_->do_relative_octave (p, false); -} Musical_pitch Simultaneous_music::to_relative_octave (Musical_pitch p) { - return music_p_list_p_->do_relative_octave (p, true); + return do_relative_octave (p, true); } -void -Sequential_music::translate (Moment dt) +Musical_pitch +Music_sequence::do_relative_octave (Musical_pitch p, bool b) { - offset_mom_ += dt; + 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 i (top ()); i.ok (); i++) + for (Cons *i = head_; i ; i = i->next_) { - last = i->to_relative_octave (last); + last = i->car_->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 () + : Cons_list (s) { - for (PCursor i(s.top()); i.ok (); i++) - add_music (i->clone()); + Cons_list::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 (m_p, 0)); } - -IMPLEMENT_IS_TYPE_B1(Request_chord, Simultaneous_music); - - Request_chord::Request_chord() : Simultaneous_music (new Music_list) { - multi_level_i_ =0; } Musical_pitch Request_chord::to_relative_octave (Musical_pitch last) { - for (iter (music_p_list_p_->top(),i); i.ok (); i++) + for (Cons *i = music_p_list_p_->head_; i ; i = i->next_) { - Musical_req *m =((Request*)i.ptr ())->access_Musical_req (); - if (m && m->access_Melodic_req ()) - { - Musical_pitch &pit = m->access_Melodic_req ()->pitch_; + if (Melodic_req *m= dynamic_cast (i->car_)) + { + Musical_pitch &pit = m->pitch_; pit.to_relative_octave (last); return pit; } @@ -146,6 +117,5 @@ Request_chord::to_relative_octave (Musical_pitch last) Music_list::Music_list () - : Pointer_list () { }