X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fmusic-list.cc;h=f836fb4485e23133594b8c78ca9cb32b08690f5c;hb=8aad615ea7bb31f49a0c2afc21eea5ff5de20437;hp=9008ddc27a4d0353510a3c542516a7885de26010;hpb=036af34aa44a151b9e67c18e0acccaafdfae9de8;p=lilypond.git diff --git a/lily/music-list.cc b/lily/music-list.cc index 9008ddc27a..f836fb4485 100644 --- a/lily/music-list.cc +++ b/lily/music-list.cc @@ -1,106 +1,153 @@ /* - 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 "music.hh" -#include "debug.hh" #include "music-list.hh" +#include "musical-pitch.hh" +#include "request.hh" +#include "musical-request.hh" +#include "main.hh" -Music_list::Music_list(Music_list const&s) +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()); + Moment dur = 0; + for (iter (music_p_list_p_->top(), i); i.ok (); i++) + dur = dur >? i->length_mom (); + + return dur; } -IMPLEMENT_STATIC_NAME(Music_list); -IMPLEMENT_STATIC_NAME(Chord); -IMPLEMENT_STATIC_NAME(Voice); -IMPLEMENT_IS_TYPE_B1(Music_list, Music); -IMPLEMENT_IS_TYPE_B1(Voice,Music_list); -IMPLEMENT_IS_TYPE_B1(Chord,Music_list); +void +Music_sequence::compress (Moment m) +{ + for (PCursor i(music_p_list_p_->top()); i.ok (); i++) + i->compress (m); +} -MInterval -Chord::time_int()const +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 { + 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); } -Voice::Voice() +Musical_pitch +Simultaneous_music::to_relative_octave (Musical_pitch p) { - offset_mom_ =0; + return do_relative_octave (p, true); } -MInterval -Voice::time_int() const +Musical_pitch +Music_sequence::do_relative_octave (Musical_pitch p, bool b) { - Moment last=0; - for (iter(music_p_list_.top(), i); i.ok(); i++) - last += i->time_int().length(); - return offset_mom_ + MInterval(0,last); + return music_p_list_p_->do_relative_octave (p, b); } -void -Voice::translate(Moment dt) +Musical_pitch +Music_list::do_relative_octave (Musical_pitch last, bool ret_first) { - offset_mom_ += dt; + 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; } -Music_list::Music_list() +Music_list::Music_list (Music_list const &s) + : Pointer_list () { - multi_level_i_ = 0; + for (PCursor i(s.top()); i.ok (); i++) + add_music (i->clone()); } void -Music_list::add(Music*m_p) +Music_list::add_music (Music*m_p) { - if (!m_p) - return; + if (!m_p) + return; - m_p->parent_music_l_ = this; - music_p_list_.bottom().add(m_p); + bottom().add (m_p); } -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 (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; } -IMPLEMENT_IS_TYPE_B1(Voice_element, Chord); -IMPLEMENT_STATIC_NAME(Voice_element); -Voice_element::Voice_element() +Music_list::Music_list () + : Pointer_list () { - multi_level_i_ =0; }