]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/request-chord-iterator.cc
``slikken kreng''
[lilypond.git] / lily / request-chord-iterator.cc
index 7f0b00827f96e47beaa47fdb16b964f43d5c8411..009302da5deaa52ec0bd0782b4769cbefbfb75f8 100644 (file)
@@ -3,81 +3,80 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "translator-group.hh"
-#include "debug.hh"
+#include "warn.hh"
 #include "request-chord-iterator.hh"
 #include "music-list.hh"
 #include "request.hh"
 
-
-
-void
-Request_chord_iterator::construct_children()
+Request_chord_iterator::Request_chord_iterator ()
 {
-  elt_length_mom_ =elt_l ()->length_mom ();
-  get_req_translator_l();
 }
 
-Request_chord*
-Request_chord_iterator::elt_l () const
+Request_chord_iterator::Request_chord_iterator (Request_chord_iterator const &src)
+  : Simple_music_iterator (src)
 {
-  return (Request_chord*) music_l_;
 }
 
-Request_chord_iterator::Request_chord_iterator ()
+Translator_group*
+Request_chord_iterator::get_req_translator ()
 {
-  last_b_ = false;
-}
+  assert (report_to ());
+  if (report_to ()->is_bottom_translator_b ())
+    return report_to ();
 
+  set_translator (report_to ()->get_default_interpreter ());
+  return report_to ();
+}
 
-bool
-Request_chord_iterator::ok() const
+void
+Request_chord_iterator::construct_children ()
 {
-  return (elt_length_mom_ && !last_b_) || first_b_;
+  Simple_music_iterator::construct_children ();
+  get_req_translator ();
 }
 
-Moment
-Request_chord_iterator::next_moment() const
+Request_chord*
+Request_chord_iterator::get_elt () const
 {
-  Moment m (0);
-  if  (!first_b_)
-    m = elt_length_mom_;
-  return m;
+  return (Request_chord*) get_music ();
 }
 
-
-void
-Request_chord_iterator::do_print() const
+SCM
+Request_chord_iterator::get_pending_events (Moment) const
 {
-#ifndef NPRINT
-  DEBUG_OUT << "duration: " << elt_length_mom_;
-#endif
+  SCM s = SCM_EOL;
+  if (last_processed_mom_ < Moment (0))
+    {
+      Music_sequence * ms = dynamic_cast<Music_sequence*> (get_music ());
+     
+      for (SCM m = ms->music_list (); gh_pair_p (m); m = ly_cdr (m))
+       {
+         s = gh_cons (ly_car (m) , s);
+       }
+    }
+  return s;
 }
 
 void
-Request_chord_iterator::do_process_and_next (Moment mom)
+Request_chord_iterator::process (Moment m)
 {
-  if (first_b_)
+  if (last_processed_mom_ < Moment (0))
     {
-      for (SCM s = dynamic_cast<Music_sequence *> (music_l_)->music_list (); gh_pair_p (s);  s = gh_cdr (s))
+      for (SCM s = dynamic_cast<Music_sequence *> (get_music ())->music_list ();
+          gh_pair_p (s);  s = ly_cdr (s))
        {
-         Music *mus = unsmob_music (gh_car (s));
-         if (Request * req_l = dynamic_cast<Request*> (mus))
-           {
-             bool gotcha = try_music (req_l);
-             if (!gotcha)
-               req_l->origin ()->warning (_f ("Junking request: `%s'", classname( req_l)));
-           }
-         else
-           mus->origin ()->warning (_f ("Huh?  Not a Request: `%s'",
-                                                classname (mus)));
-                   }
-      first_b_ = false;
-    }
+         Music *mus = unsmob_music (ly_car (s));
 
-  if (mom >= elt_length_mom_)
-    last_b_ = true;
+         bool gotcha = try_music (mus);
+         if (!gotcha)
+           mus->origin ()->warning (_f ("Junking request: `%s'", classname (mus)));
+       }
+    }
+  skip (m);
 }
+
+IMPLEMENT_CTOR_CALLBACK (Request_chord_iterator);