X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsequential-music-iterator.cc;h=bc00a33e12c3a4e57cf822e5cf8d427dfaf0f298;hb=dcf803f51a8621e64670930f89e9e02d845fe598;hp=d5ba03eef698f46ea8764c48daa172b651924220;hpb=3a46c107cba4b3d2dba74e21f9046cc399c8baf1;p=lilypond.git diff --git a/lily/sequential-music-iterator.cc b/lily/sequential-music-iterator.cc index d5ba03eef6..bc00a33e12 100644 --- a/lily/sequential-music-iterator.cc +++ b/lily/sequential-music-iterator.cc @@ -3,126 +3,23 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys */ -#include "translator-group.hh" -#include "debug.hh" -#include "sequential-music-iterator.hh" -#include "music-list.hh" - -void -Sequential_music_iterator::do_print() const -{ - if (iter_p_) - iter_p_->print(); -} - -Sequential_music_iterator::Sequential_music_iterator () -{ - cursor_p_ = 0; - here_mom_ = 0; - iter_p_ =0; -} - -void -Sequential_music_iterator::construct_children() -{ - cursor_p_ = new PCursor (dynamic_cast (music_l_)->music_p_list_p_->top ()); - - while (cursor_p_->ok()) - { - 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 = cursor_p_->ptr()->length_mom (); - here_mom_ += elt_time; - cursor_p_->next(); -} - -void -Sequential_music_iterator::start_next_element() -{ - assert (!iter_p_); - iter_p_ = get_iterator_p ( cursor_p_->ptr()); -} - -void -Sequential_music_iterator::set_Sequential_music_translator() -{ - if (iter_p_->report_to_l()->depth_i () > report_to_l ()->depth_i ()) - set_translator (iter_p_->report_to_l()); -} - -Sequential_music_iterator::~Sequential_music_iterator() -{ - delete cursor_p_; - assert (! iter_p_); -} - +#include "context.hh" +#include "warn.hh" +#include "sequential-music-iterator.hh" +#include "music-list.hh" -void -Sequential_music_iterator::do_process_and_next (Moment until) -{ - while (1) - { - Moment local_until = until - here_mom_; - while (iter_p_->ok()) - { - Moment here = iter_p_->next_moment(); - if (here != local_until) - goto loopexit; - - iter_p_->process_and_next (local_until); - } - - if (!iter_p_->ok()) - { - leave_element(); - - if (cursor_p_->ok()) - { - start_next_element(); - set_Sequential_music_translator(); - } - else - { - goto loopexit; - } - } - } -loopexit: - Music_iterator::do_process_and_next (until); -} -Moment -Sequential_music_iterator::next_moment() const -{ - return iter_p_->next_moment() + here_mom_; -} +IMPLEMENT_CTOR_CALLBACK (Sequential_music_iterator); -bool -Sequential_music_iterator::ok() const +SCM +Sequential_music_iterator::get_music_list ()const { - return iter_p_; + return dynamic_cast (get_music ())->music_list (); } -