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);