X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-list.cc;h=3d155a90c67fc132ac966aacff0e8a62d9efff81;hb=ee0dca4cea06f2d354cb33d935033116e88a3dba;hp=3d8f965b8b21608a1b2828ea79393849759aec17;hpb=0d2593e4ef1f3d1eb6994223f1de8f6c8fbcd066;p=lilypond.git diff --git a/lily/music-list.cc b/lily/music-list.cc index 3d8f965b8b..3d155a90c6 100644 --- a/lily/music-list.cc +++ b/lily/music-list.cc @@ -1,76 +1,153 @@ /* - music-list.cc -- implement Music_list, + 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--1998 Han-Wen Nienhuys */ +#include "music-list.hh" +#include "musical-pitch.hh" +#include "request.hh" +#include "musical-request.hh" +#include "main.hh" -#include "music.hh" -#include "debug.hh" +Moment +Simultaneous_music::duration () const +{ + Moment dur = 0; + for (iter (music_p_list_p_->top(), i); i.ok (); i++) + dur = dur >? i->duration (); + + return dur; +} -Music_list::Music_list(Music_list const&s) +void +Music_sequence::compress (Moment m) { - for (iter(s.music_p_list_.top(), i); i.ok(); i++) - add(i->clone()); + for (PCursor i(music_p_list_p_->top()); i.ok (); i++) + i->compress (m); } +Simultaneous_music::Simultaneous_music(Music_list *p) + : Music_sequence (p) +{ -IMPLEMENT_STATIC_NAME(Music_list); +} -void -Music_list::add(Music*mus_p) +Sequential_music::Sequential_music(Music_list *p) + : Music_sequence (p) { - music_p_list_.bottom().add(mus_p); } -void -Music_list::transpose(Melodic_req const*m) +Moment +Sequential_music::duration () const { - for (iter(music_p_list_.top(), i); i.ok(); i++) - i->transpose(m); + Moment last=0; + for (iter (music_p_list_p_->top(), i); i.ok (); i++) + { + last += i->duration (); + } + return last; } -void -Music_list::do_print() const +Musical_pitch +Sequential_music::to_relative_octave (Musical_pitch p) { - for (iter(music_p_list_.top(), i); i.ok(); i++) - i->print(); + return do_relative_octave (p, false); } -IMPLEMENT_STATIC_NAME(Chord); +Musical_pitch +Simultaneous_music::to_relative_octave (Musical_pitch p) +{ + return do_relative_octave (p, true); +} -void -Chord::translate(Moment dt) +Musical_pitch +Music_sequence::do_relative_octave (Musical_pitch p, bool b) { - for (iter(music_p_list_.top(), i); i.ok(); i++) - i->translate(dt); + return music_p_list_p_->do_relative_octave (p, b); } -MInterval -Chord::time_int()const +Musical_pitch +Music_list::do_relative_octave (Musical_pitch last, bool ret_first) { - MInterval m; - for (iter(music_p_list_.top(), i); i.ok(); i++) - m.unite(i->time_int()); - return m; + Musical_pitch retval; + int count=0; + for (PCursor i (top ()); i.ok (); i++) + { + last = i->to_relative_octave (last); + if (!count ++ ) + retval = last; + } + + // hmmm +#if 0 + if (!ret_first && find_old_relative_b) + { + PCursor 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; + + return retval; } -MInterval -MVoice::time_int() const + +Music_list::Music_list (Music_list const &s) + : Pointer_list () { - Moment last=0; - for (iter(music_p_list_.top(), i); i.ok(); i++) - last += i->time_int().length(); - return MInterval (0,last); + for (PCursor i(s.top()); i.ok (); i++) + add_music (i->clone()); } void -MVoice::translate(Moment dt) +Music_list::add_music (Music*m_p) +{ + if (!m_p) + return; + + bottom().add (m_p); +} + + + + + +Request_chord::Request_chord() + : Simultaneous_music (new Music_list) { - for (iter(music_p_list_.top(), i); i.ok(); i++) - i->translate(dt); } -IMPLEMENT_STATIC_NAME(MVoice); + +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 (i.ptr ())) + { + Musical_pitch &pit = m->pitch_; + pit.to_relative_octave (last); + return pit; + } + } + return last; +} + + +Music_list::Music_list () + : Pointer_list () +{ +}