X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsequential-music-iterator.cc;h=f933df7bb43330d82351adf8fae1bd8283444196;hb=31568c504806f35aac420a394c9eab07abd9faa7;hp=3e89e02522bf74d0181c67eb2b158e89b31dcda3;hpb=9b34d4afef6dd3f50c8f9cec1e613eb44f8c7913;p=lilypond.git diff --git a/lily/sequential-music-iterator.cc b/lily/sequential-music-iterator.cc index 3e89e02522..f933df7bb4 100644 --- a/lily/sequential-music-iterator.cc +++ b/lily/sequential-music-iterator.cc @@ -1,177 +1,20 @@ /* - Sequential_music_iterator.cc -- implement Sequential_music_iterator + sequential-music-iterator.cc -- implement Sequential_music_iterator source file of the GNU LilyPond music typesetter - (c) 1997--2000 Han-Wen Nienhuys + (c) 1997--2006 Han-Wen Nienhuys */ -#include "grace-iterator.hh" -#include "translator-group.hh" -#include "debug.hh" -#include "sequential-music-iterator.hh" -#include "music-list.hh" -#include "request-chord-iterator.hh" - -Sequential_music_iterator::Sequential_music_iterator () -{ - cursor_ = 0; - here_mom_ = 0; - iter_p_ =0; -} - -Sequential_music_iterator::Sequential_music_iterator (Sequential_music_iterator const &src) - : Music_iterator (src) -{ - cursor_ = src.cursor_; - here_mom_ = src.here_mom_; - iter_p_ = src.iter_p_; -} - -Sequential_music_iterator::~Sequential_music_iterator() -{ - if (iter_p_) - { - if (iter_p_->ok ()) - music_l_->origin ()->warning (_ ("Must stop before this music ends")); - delete iter_p_; - iter_p_ = 0; - } -} -void -Sequential_music_iterator::do_print() const -{ - if (iter_p_) - iter_p_->print(); -} - -void -Sequential_music_iterator::construct_children() -{ - cursor_ = dynamic_cast (music_l_)->music_list (); - - while (gh_pair_p (cursor_ )) - { - start_next_element(); - if (!iter_p_->ok()) - { - leave_element(); - } - else - { - set_sequential_music_translator(); - break; - } - } -} - -void -Sequential_music_iterator::leave_element() -{ - delete iter_p_; - iter_p_ =0; - Moment elt_time = unsmob_music (gh_car (cursor_))->length_mom (); - here_mom_ += elt_time; - cursor_ =gh_cdr (cursor_); -} - -void -Sequential_music_iterator::start_next_element() -{ - assert (!iter_p_); - iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_))); -} - -void -Sequential_music_iterator::set_sequential_music_translator() -{ - Translator_group * child_report = child_report = iter_p_->report_to_l (); - if (dynamic_cast (iter_p_)) - child_report = child_report->daddy_trans_l_; - - if (report_to_l()->depth_i () < child_report->depth_i ()) - set_translator (child_report); -} - -Music* -Sequential_music_iterator::get_music () -{ - if (ok ()) - return unsmob_music (gh_car (cursor_)); - - return 0; -} - -bool -Sequential_music_iterator::next () -{ - if (ok ()) - { - bool b = false; - if (iter_p_->ok ()) - b = iter_p_->next (); - if (!b) - { - set_sequential_music_translator (); - leave_element (); - if (gh_pair_p (cursor_)) - start_next_element (); - b = ok (); - } - return b; - } - return false; -} - -/* - This should use get_music () and next () - */ -void -Sequential_music_iterator::do_process_and_next (Moment until) -{ - if (ok ()) - { - while (1) - { - Moment local_until = until - here_mom_; - while (iter_p_->ok ()) - { - Moment here = iter_p_->next_moment (); - if (here != local_until) - return Music_iterator::do_process_and_next (until); - - iter_p_->process_and_next (local_until); - } - - if (!iter_p_->ok ()) - { - set_sequential_music_translator (); - leave_element (); - - if (gh_pair_p (cursor_)) - start_next_element (); - else - return Music_iterator::do_process_and_next (until); - } - } - } -} - -Moment -Sequential_music_iterator::next_moment() const -{ - return iter_p_->next_moment() + here_mom_; -} +#include "context.hh" +#include "sequential-music-iterator.hh" +#include "music.hh" +#include "warn.hh" +IMPLEMENT_CTOR_CALLBACK (Sequential_music_iterator); -bool -Sequential_music_iterator::ok() const +SCM +Sequential_music_iterator::get_music_list ()const { - return iter_p_; -} - -Music_iterator* -Sequential_music_iterator::try_music_in_children (Music *m) const -{ - return iter_p_ ? iter_p_->try_music (m) : 0; + return get_music ()->get_property ("elements"); }