X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Ffolded-repeat-iterator.cc;h=8ec9103eb9f3cfaf8d3eb2870f7cb23308768cb8;hb=95e91ffb8d0d82efbda9d266c63d4ccf0bcc5133;hp=75c2e0f3d706f2809c38f0622f21908cc9d83e6c;hpb=94189ec2b8da6d7e89dc619c646a927adead9b19;p=lilypond.git diff --git a/lily/folded-repeat-iterator.cc b/lily/folded-repeat-iterator.cc index 75c2e0f3d7..8ec9103eb9 100644 --- a/lily/folded-repeat-iterator.cc +++ b/lily/folded-repeat-iterator.cc @@ -1,69 +1,56 @@ /* - repeated-music-iterator.cc -- implement Folded_repeat_iterator + folded-repeat-iterator.cc -- implement Folded_repeat_iterator source file of the GNU LilyPond music typesetter - (c) 1999--2001 Han-Wen Nienhuys + (c) 1999--2004 Han-Wen Nienhuys */ - -/* - Folded repeats are a stupid idea at this point, so we refrain from - implementing get_music () and skip (). -*/ - +#include "input.hh" #include "folded-repeat-iterator.hh" #include "repeated-music.hh" #include "music-list.hh" #include "simultaneous-music-iterator.hh" -#include "translator-group.hh" +#include "context.hh" Folded_repeat_iterator::Folded_repeat_iterator () { - main_iter_p_ = 0; - alternative_iter_p_ = 0; + main_iter_ = 0; + alternative_iter_ = 0; } bool Folded_repeat_iterator::ok () const { - return main_iter_p_ || alternative_iter_p_; -} - -Folded_repeat_iterator::~Folded_repeat_iterator () -{ - delete main_iter_p_; - delete alternative_iter_p_; + return main_iter_ || alternative_iter_; } - -Folded_repeat_iterator::Folded_repeat_iterator (Folded_repeat_iterator const &src) - : Music_iterator (src) +void +Folded_repeat_iterator::do_quit () { - main_iter_p_ = src.main_iter_p_ ? src.main_iter_p_->clone () : 0; - alternative_iter_p_ = src.alternative_iter_p_ ? src.alternative_iter_p_->clone () : 0; - main_length_mom_ = src.main_length_mom_; + if (main_iter_)main_iter_->quit (); + if (alternative_iter_)alternative_iter_->quit (); } Moment Folded_repeat_iterator::pending_moment () const { - if (main_iter_p_) + if (main_iter_) { - return main_iter_p_->pending_moment (); + return main_iter_->pending_moment (); } else - return main_length_mom_ + alternative_iter_p_->pending_moment (); + return main_length_mom_ + alternative_iter_->pending_moment (); } void Folded_repeat_iterator::construct_children () { - Repeated_music * mus = dynamic_cast (music_l_); - main_iter_p_ = get_iterator_p (mus->body ()); - if (!main_iter_p_->ok()) + Repeated_music * mus = dynamic_cast (get_music ()); + main_iter_ = unsmob_iterator (get_iterator (mus->body ())); + if (!main_iter_->ok ()) { - leave_body (); + leave_body (); enter_alternative (); } } @@ -71,32 +58,32 @@ Folded_repeat_iterator::construct_children () void Folded_repeat_iterator::process (Moment m) { - if (!m) + if (!m.to_bool () ) { - bool success = try_music (music_l_); + bool success = try_music (get_music ()); if (!success) - music_l_->origin ()->warning ( _("no one to print a repeat brace")); + get_music ()->origin ()->warning (_ ("no one to print a repeat brace")); } - if (main_iter_p_) + if (main_iter_) { - main_iter_p_->process (m); - if (!main_iter_p_->ok ()) + main_iter_->process (m); + if (!main_iter_->ok ()) leave_body (); } - if (!main_iter_p_ && !alternative_iter_p_) + if (!main_iter_ && !alternative_iter_) { enter_alternative (); } - if (alternative_iter_p_) + if (alternative_iter_) { - alternative_iter_p_->process (m - main_length_mom_); - if (!alternative_iter_p_->ok ()) + alternative_iter_->process (m - main_length_mom_); + if (!alternative_iter_->ok ()) { - delete alternative_iter_p_; - alternative_iter_p_ =0; + alternative_iter_->quit (); + alternative_iter_ =0; } } } @@ -104,24 +91,30 @@ Folded_repeat_iterator::process (Moment m) void Folded_repeat_iterator::leave_body () { - Repeated_music * mus = dynamic_cast (music_l_); - delete main_iter_p_; - main_iter_p_ = 0; - main_length_mom_ += mus->body ()->length_mom (); + Repeated_music * mus = dynamic_cast (get_music ()); + + main_iter_->quit (); + main_iter_ = 0; + main_length_mom_ += mus->body ()->get_length (); } void Folded_repeat_iterator::enter_alternative () { - Repeated_music * mus = dynamic_cast (music_l_); + Repeated_music * mus = dynamic_cast (get_music ()); if (mus->alternatives ()) { + /* + ugh. + */ Simultaneous_music_iterator * s = new Simultaneous_music_iterator; - s->separate_contexts_b_ = true; - s->init_translator (mus->alternatives (), report_to_l ()); - - alternative_iter_p_ = s; - alternative_iter_p_->construct_children (); + s->create_separate_contexts_ = true; + s->init_translator (mus, get_outlet ()); + + alternative_iter_ = s; + alternative_iter_->construct_children (); + + scm_gc_unprotect_object (s->self_scm ()); } } @@ -129,13 +122,30 @@ Folded_repeat_iterator::enter_alternative () Music_iterator* Folded_repeat_iterator::try_music_in_children (Music * m) const { - if (main_iter_p_) + if (main_iter_) { - return main_iter_p_->try_music (m); + return main_iter_->try_music (m); } - if (alternative_iter_p_) - return alternative_iter_p_->try_music (m); + if (alternative_iter_) + return alternative_iter_->try_music (m); return 0; } +void +Folded_repeat_iterator::derived_mark ()const +{ + if (main_iter_) + scm_gc_mark (main_iter_->self_scm ()); + if (alternative_iter_) + scm_gc_mark (alternative_iter_->self_scm ()); +} + +void +Folded_repeat_iterator::derived_substitute (Context *f, Context *t) +{ + if (main_iter_) + main_iter_->substitute_outlet (f,t); + if (alternative_iter_) + alternative_iter_->substitute_outlet (f,t); +} -IMPLEMENT_CTOR_CALLBACK(Folded_repeat_iterator); +IMPLEMENT_CTOR_CALLBACK (Folded_repeat_iterator);