]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/sequential-iterator.cc
2003 -> 2004
[lilypond.git] / lily / sequential-iterator.cc
index b2c31269771c5aa7097d7c8af44ebe4163a69c11..e0fef5778b2776a6ac882a43d0e19b71229f733c 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "translator-group.hh"
@@ -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<Sequential_iterator*> (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)