]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/repeated-music-iterator.cc
release: 1.1.42
[lilypond.git] / lily / repeated-music-iterator.cc
index 31d77da08ee6fb22261451b1df889f63ec3631a3..80007e5b131874673eaf172fdbc812b898ed1e3a 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--1999 Jan Nieuwenhuizen <janneke@gnu.org>
   
  */
 
@@ -18,10 +18,6 @@ Repeated_music_iterator::Repeated_music_iterator ()
   repeat_iter_p_ = 0;
   alternative_iter_p_ = 0;
   here_mom_ = 0;
-#if 0
-  unfold_i_ = repeated_music_l ()->unfold_b_ ? 
-    repeated_music_l ()->repeats_i_ - 1 : 0;
-#endif
   unfold_i_ = -1; 
 }
 
@@ -41,11 +37,7 @@ Repeated_music_iterator::do_print () const
 void
 Repeated_music_iterator::construct_children ()
 {
-#if 0
-  unfold_i_ = repeated_music_l ()->unfold_b_ ? 
-    repeated_music_l ()->repeats_i_ - 1 : 0;
-#endif
-  repeat_iter_p_ = get_iterator_p (repeated_music_l ()->repeat_p_);  
+  repeat_iter_p_ = get_iterator_p (dynamic_cast<Repeated_music const*> (music_l_)->repeat_p_);
 }
 
 void
@@ -53,7 +45,7 @@ Repeated_music_iterator::do_process_and_next (Moment m)
 {
   if (first_b_)
     {
-      bool success = report_to_l ()->try_music (repeated_music_l ());
+      bool success = report_to_l ()->try_music (dynamic_cast<Repeated_music const*> (music_l_));
       if (!success)
        music_l_->warning ( _("No one to print a volta bracket"));
     }
@@ -67,17 +59,19 @@ Repeated_music_iterator::do_process_and_next (Moment m)
 Moment
 Repeated_music_iterator::next_moment () const
 {
+  
   if (repeat_iter_p_)
     return repeat_iter_p_->next_moment () + here_mom_;
   else if (alternative_iter_p_)
     return alternative_iter_p_->next_moment () + here_mom_;
-  // huh?
-//  return repeated_music_l ()->repeat_p_->length_mom () 
-//    * Moment (repeated_music_l ()->repeats_i_)
-//   + repeated_music_l ()->alternative_p_->length_mom () + here_mom_;
-  return repeated_music_l ()->alternative_p_->length_mom () + here_mom_;
+
+  Repeated_music const*r = dynamic_cast<Repeated_music const*>(music_l_);
+  return r->alternative_p_->length_mom () + here_mom_;
 }
 
+/*
+  FIXME
+ */
 bool
 Repeated_music_iterator::ok () const
 {
@@ -95,24 +89,22 @@ Repeated_music_iterator::ok () const
   return ok ();
 }
 
-Repeated_music*
-Repeated_music_iterator::repeated_music_l () const
-{
-  return (Repeated_music*)Music_iterator::music_l_;
-}
 
 void
 Repeated_music_iterator::start_next_element ()
 {
-  if (repeat_iter_p_)
+  Repeated_music const*rep =dynamic_cast<Repeated_music const*> (music_l_);
+
+
+ if (repeat_iter_p_)
     {
       assert (!repeat_iter_p_->ok ());
       assert (!alternative_iter_p_);
       delete repeat_iter_p_;
       repeat_iter_p_ = 0;
       alternative_iter_p_ = dynamic_cast<Music_list_iterator*>
-       (get_iterator_p ((Music*)repeated_music_l ()->alternative_p_));  
-      here_mom_ += repeated_music_l ()->repeat_p_->length_mom ();
+       (get_iterator_p ((Music*)rep->alternative_p_));  
+      here_mom_ += rep->repeat_p_->length_mom ();
     }
   else if (alternative_iter_p_)
     {
@@ -121,14 +113,14 @@ Repeated_music_iterator::start_next_element ()
       delete alternative_iter_p_;
       alternative_iter_p_ = 0;
       if (unfold_i_ < 0)
-       unfold_i_ = repeated_music_l ()->unfold_b_ ? 
-         repeated_music_l ()->repeats_i_ - 1 : 0;
+       unfold_i_ = rep->unfold_b_ ? 
+         rep->repeats_i_ - 1 : 0;
       if (unfold_i_)
         {
          unfold_i_--;
-         repeat_iter_p_ = get_iterator_p (repeated_music_l ()->repeat_p_);
+         repeat_iter_p_ = get_iterator_p (rep->repeat_p_);
          // urg, assume same length alternatives for now...
-//       here_mom_ += repeated_music_l ()->alternative_p_->music_p_list_p_->top ()->length_mom ();
+//       here_mom_ += rep->alternative_p_->music_p_list_p_->top ()->length_mom ();
          /*
            URG
            this is *wrong* but at least it doesn't dump core
@@ -137,7 +129,7 @@ Repeated_music_iterator::start_next_element ()
 
            how to intercept this...
           */
-         here_mom_ += repeated_music_l ()->alternative_p_->length_mom ();
+         here_mom_ += rep->alternative_p_->length_mom ();
        }
     }
 }