X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsequential-iterator.cc;h=b273ed5e6816720a8ae92960ea9e0980fd6f4ee6;hb=01378c85f23e4bdbc07cd1f3b06ddfd573377bb9;hp=b2c31269771c5aa7097d7c8af44ebe4163a69c11;hpb=d9e57e198888ce00fbf9acd84c351356de94552f;p=lilypond.git diff --git a/lily/sequential-iterator.cc b/lily/sequential-iterator.cc index b2c3126977..b273ed5e68 100644 --- a/lily/sequential-iterator.cc +++ b/lily/sequential-iterator.cc @@ -59,21 +59,7 @@ Sequential_iterator::do_quit () } -Sequential_iterator::Sequential_iterator (Sequential_iterator const &src) - : Music_iterator (src) -{ - grace_fixups_ = copy_grace_fixups (src.grace_fixups_); - cursor_ = src.cursor_; - list_ = src.cursor_; - here_mom_ = src.here_mom_; - iter_ = 0; - if (src.iter_) - { - iter_ = src.iter_->clone (); - scm_gc_unprotect_object (iter_->self_scm()); - } -} void Sequential_iterator::derived_mark ()const @@ -85,6 +71,14 @@ Sequential_iterator::derived_mark ()const } +void +Sequential_iterator::derived_substitute (Translator_group*f,Translator_group*t) +{ + if (iter_) + iter_->substitute_outlet (f,t); + +} + Grace_fixup * get_grace_fixups (SCM cursor) { @@ -221,8 +215,8 @@ Sequential_iterator::next_element (bool) void Sequential_iterator::descend_to_child () { - Translator_group * child_report = child_report = iter_->report_to (); - Translator_group * me_report = report_to (); + Translator_group * child_report = child_report = iter_->get_outlet (); + Translator_group * me_report = get_outlet (); Translator_group * c = child_report; while (c && c != me_report) @@ -235,82 +229,6 @@ Sequential_iterator::descend_to_child () } -/* - Retrieve all music (starting at HERE), until a music with length L > - 0 is found. From the precondition, we know that UNTIL is later than - the earliest event. Hence we know - - L >= (UNTIL - HERE) - - so something that comes after this thing with L > 0 happens after - - HERE + L >= HERE + (UNTIL - HERE) = UNTIL - - Hence all events after the one with L>0 are uninteresting, so we - ignore them. - -*/ - -SCM -Sequential_iterator::get_pending_events (Moment until) const -{ - SCM s = SCM_EOL; - if (until < pending_moment ()) - return s; - - Sequential_iterator * me = - dynamic_cast (clone ()); - while (me->ok ()) - { - SCM nm = me->iter_->get_pending_events (until - me->here_mom_); - s = gh_append2 (nm, s); - - Moment m = 0; - for (SCM i = nm; gh_pair_p (i); i = ly_cdr (i)) - { - Music *mus=unsmob_music (ly_car (i)); - m = m >? (mus->get_length () - mus->start_mom ()); - } - if (m > Moment (0)) - break ; - else - me->next_element (false); - } - - scm_gc_unprotect_object (me->self_scm()); - return s; -} - - -/* - Skip events till UNTIL. We don't do any other side effects such as - descending to child iterator contexts, because they might depend on - \context specs and \translator changes being executed - */ -void -Sequential_iterator::skip (Moment until) -{ - while (ok ()) - { - if (grace_fixups_ && - grace_fixups_->start_ == here_mom_ - && (grace_fixups_->start_ + grace_fixups_->length_ - + Moment (Rational (0), grace_fixups_->grace_start_) == until)) - { - /* - do the stuff/note/rest preceding a grace. - */ - iter_->skip (iter_->music_get_length ()); - } - else if (iter_->music_get_length () >= until - here_mom_) - iter_->skip (until - here_mom_ + iter_->music_start_mom ()); - - if (iter_->ok ()) - return ; - - next_element (false); - } -} void Sequential_iterator::process (Moment until)