X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-list.cc;h=2b2fce2fda216187f7917b1cb343cfcba5073df9;hb=0cf97b5cdceecbba937f43ac827f4065aad5001e;hp=93a64e6a014703140eb77d7011f87c3b70ce30ee;hpb=2862b1027f316a2f0444fa92e441ee28acf7a463;p=lilypond.git diff --git a/lily/music-list.cc b/lily/music-list.cc index 93a64e6a01..2b2fce2fda 100644 --- a/lily/music-list.cc +++ b/lily/music-list.cc @@ -1,115 +1,128 @@ /* - music-list.cc -- implement Music_list, Chord, Voice + music-list.cc -- implement Music_sequence, Simultaneous_music, Sequential_music source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ - -#include -#include "music.hh" -#include "debug.hh" #include "music-list.hh" - -Music_list::Music_list (Music_list const&s) - : Music (s) +#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 { - multi_level_i_ = s.multi_level_i_; - for (iter (s.music_p_list_.top(), i); i.ok (); i++) - add (i->clone()); + return maximum_length (); } -IMPLEMENT_IS_TYPE_B1(Music_list, Music); -IMPLEMENT_IS_TYPE_B1(Voice,Music_list); -IMPLEMENT_IS_TYPE_B1(Chord,Music_list); -MInterval -Chord::time_int() const +void +Music_sequence::compress (Moment m) +{ + for (Cons *i = music_p_list_p_->head_; i; i = i->next_) + i->car_->compress (m); +} + +Simultaneous_music::Simultaneous_music(Music_list *p) + : Music_sequence (p) { - MInterval m; - for (iter (music_p_list_.top(), i); i.ok (); i++) - m.unite (i->time_int()); - return m; } -void -Chord::translate (Moment m) +Sequential_music::Sequential_music(Music_list *p) + : Music_sequence (p) { - for (iter (music_p_list_.top(), i); i.ok (); i++) - i->translate (m); } -Chord::Chord() +Moment +Sequential_music::length_mom () const { + return cumulative_length (); +} +Musical_pitch +Simultaneous_music::to_relative_octave (Musical_pitch p) +{ + return do_relative_octave (p, true); } -Voice::Voice() + +Musical_pitch +Music_sequence::do_relative_octave (Musical_pitch p, bool b) { - offset_mom_ =0; + return music_p_list_p_->do_relative_octave (p, b); } -MInterval -Voice::time_int() const + +Musical_pitch +Music_list::do_relative_octave (Musical_pitch last, bool ret_first) { - Moment last=0; - for (iter (music_p_list_.top(), i); i.ok (); i++) + Musical_pitch retval; + int count=0; + for (Cons *i = head_; i ; i = i->next_) { - MInterval interval = i->time_int(); - - /* - c4 <> c4 - */ - if (!interval.empty_b()) - last += interval.length(); + last = i->car_->to_relative_octave (last); + if (!count ++ ) + retval = last; } - return offset_mom_ + MInterval (0,last); -} -void -Voice::translate (Moment dt) -{ - offset_mom_ += dt; + if (!ret_first) + retval = last; + + return retval; } -Music_list::Music_list() +Music_list::Music_list (Music_list const &s) + : Cons_list (s), Input (s) { - multi_level_i_ = 0; + Cons_list::init (); + clone_killing_cons_list (*this, s.head_); } + void -Music_list::add (Music*m_p) +Music_list::add_music (Music*m_p) { if (!m_p) - return; + return; - m_p->parent_music_l_ = this; - music_p_list_.bottom().add (m_p); + append (new Killing_cons (m_p, 0)); } -void -Music_list::transpose (Melodic_req const*rq) +Request_chord::Request_chord() + : Simultaneous_music (new Music_list) { - for (iter (music_p_list_.top(),i); i.ok (); i++) - i->transpose (rq); } -void -Music_list::do_print() const + +Musical_pitch +Request_chord::to_relative_octave (Musical_pitch last) { -#ifndef NPRINT - for (iter (music_p_list_.top(),i); i.ok (); i++) - i->print(); -#endif + for (Cons *i = music_p_list_p_->head_; i ; i = i->next_) + { + if (Melodic_req *m= dynamic_cast (i->car_)) + { + Musical_pitch &pit = m->pitch_; + pit.to_relative_octave (last); + return pit; + } + } + return last; } -IMPLEMENT_IS_TYPE_B1(Request_chord, Chord); +Music_list::Music_list () +{ +} -Request_chord::Request_chord() +Music_sequence::~Music_sequence () { - multi_level_i_ =0; + delete music_p_list_p_; }