From 21bd77b94e7a07b2840dbb485ce6887bb74db20a Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:48:57 +0000 Subject: [PATCH] lilypond-0.0.76 --- lily/include/music-iterator.hh | 31 ++++------ lily/music-iterator.cc | 101 ++++++++++++++++----------------- 2 files changed, 61 insertions(+), 71 deletions(-) diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index 25f3c7fbc3..143587be88 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -45,21 +45,6 @@ public: virtual Translator * get_req_translator_l(); }; -// duh. -class Request_iterator : public Music_iterator { - Request *req_l_; - bool last_b_; -public: - Request_iterator(Request const *); - NAME_MEMBERS(); -protected: - virtual bool ok() const; - virtual Moment next_moment() const; - - virtual void do_print()const; - virtual void process_and_next(Moment); -}; - class Change_iterator : public Music_iterator { Change_reg * change_l_; public: @@ -73,6 +58,7 @@ class Chord_iterator : public Music_iterator const Chord *chord_C_; Pointer_list children_p_list_; public: + ~Chord_iterator(); Chord_iterator(Chord const*); NAME_MEMBERS(); protected: @@ -83,13 +69,20 @@ protected: virtual bool ok()const; }; -class Voice_element_iterator : public Chord_iterator { - -protected: - virtual void construct_children(); +class Voice_element_iterator : public Music_iterator { + const Voice_element * elt_l_; + Moment elt_duration_; + bool last_b_; public: Voice_element_iterator(Voice_element*); NAME_MEMBERS(); + +protected: + virtual void process_and_next(Moment); + virtual Moment next_moment()const; + virtual void construct_children(); + virtual bool ok()const; + virtual void do_print()const; }; diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index 33e6b2cdb6..b88271e158 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -15,6 +15,7 @@ IMPLEMENT_STATIC_NAME(Music_iterator); IMPLEMENT_IS_TYPE_B(Music_iterator); +Chord_iterator::~Chord_iterator(){} void Music_iterator::do_print()const { @@ -122,8 +123,6 @@ Music_iterator::static_get_iterator_p(Music *m, p = new Chord_iterator( (Chord*) m); else if (m->is_type_b( Voice::static_name())) p = new Voice_iterator( (Voice*) m); - else if (m->is_type_b( Request::static_name() )) - p = new Request_iterator( (Request*) m ); if ( m->is_type_b( Music_list::static_name())) { Music_list* ml = (Music_list*) m; @@ -304,52 +303,6 @@ Voice_iterator::ok()const /* ***************** */ -void -Request_iterator::do_print()const -{ - mtor << req_l_->name() ; -} - -Request_iterator::Request_iterator(Request const*c) -{ - req_l_ = (Request*)c; - last_b_ = false; -} - -void -Request_iterator::process_and_next(Moment m) -{ - if ( first_b_ ) { - bool gotcha = daddy_iter_l_->report_to_l()->try_request(req_l_); - if (!gotcha) - req_l_->warning("Junking request: " + String(req_l_->name())); - first_b_ = false; - } - - if ( m >= req_l_->duration() ) - last_b_ = true; -} - -Moment -Request_iterator::next_moment()const -{ - - Moment m(0); - if (!first_b_) - m = req_l_->duration(); - return m; -} - -bool -Request_iterator::ok()const -{ - return (req_l_->duration() && !last_b_) || first_b_; // ugh -} - -IMPLEMENT_STATIC_NAME(Request_iterator); -IMPLEMENT_IS_TYPE_B1(Request_iterator, Music_iterator); - -/* ****************** */ Change_iterator::Change_iterator(Change_reg * ch) { @@ -384,17 +337,61 @@ Change_iterator::process_and_next(Moment mom) /* ******************** */ IMPLEMENT_STATIC_NAME(Voice_element_iterator); -IMPLEMENT_IS_TYPE_B1(Voice_element_iterator,Chord_iterator); +IMPLEMENT_IS_TYPE_B1(Voice_element_iterator,Music_iterator); void Voice_element_iterator::construct_children() { get_req_translator_l(); - Chord_iterator::construct_children(); } Voice_element_iterator::Voice_element_iterator(Voice_element*el_l) - : Chord_iterator(el_l) { - + elt_l_ = el_l; + elt_duration_ = el_l->time_int().length(); + last_b_ = false; +} + + +bool +Voice_element_iterator::ok()const +{ + return (elt_duration_ && !last_b_) || first_b_; +} + + + +Moment +Voice_element_iterator::next_moment()const +{ + Moment m(0); + if (!first_b_) + m = elt_duration_; + return m; +} + +void +Voice_element_iterator::do_print() const +{ +#ifndef NPRINT + mtor << "duration: " << elt_duration_; +#endif +} +void +Voice_element_iterator::process_and_next(Moment mom) +{ + if ( first_b_ ) { + for (PCursor i(elt_l_->music_p_list_); i.ok(); i++) { + assert(i->is_type_b(Request::static_name())); + Request * req_l = (Request*)i.ptr(); + bool gotcha = report_to_l()->try_request(req_l); + if (!gotcha) + req_l->warning("Junking request: " + String(req_l->name())); + + } + first_b_ = false; + } + + if ( mom >= elt_duration_ ) + last_b_ = true; } -- 2.39.5