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"
Request_chord_iterator::Request_chord_iterator ()
{
- last_b_ = false;
}
Request_chord_iterator::Request_chord_iterator (Request_chord_iterator const &src)
- : Music_iterator (src)
+ : Simple_music_iterator (src)
{
- last_b_ = src.last_b_;
- elt_length_mom_ = src.elt_length_mom_;
}
-void
-Request_chord_iterator::construct_children()
-{
- elt_length_mom_ =elt_l ()->length_mom ();
- get_req_translator_l();
-}
-
-Request_chord*
-Request_chord_iterator::elt_l () const
+Translator_group*
+Request_chord_iterator::get_req_translator_l ()
{
- return (Request_chord*) music_l_;
-}
+ assert (report_to_l ());
+ if (report_to_l ()->is_bottom_translator_b ())
+ return report_to_l ();
-bool
-Request_chord_iterator::ok() const
-{
- return (elt_length_mom_ && !last_b_) || first_b_;
+ set_translator (report_to_l ()->get_default_interpreter ());
+ return report_to_l ();
}
-Moment
-Request_chord_iterator::next_moment() const
+void
+Request_chord_iterator::construct_children ()
{
- Moment m (0);
- if (!first_b_)
- m = elt_length_mom_;
- return m;
+ Simple_music_iterator::construct_children ();
+ get_req_translator_l ();
}
-
-void
-Request_chord_iterator::do_print() const
+Request_chord*
+Request_chord_iterator::elt_l () const
{
-#ifndef NPRINT
- DEBUG_OUT << "duration: " << elt_length_mom_;
-#endif
+ return (Request_chord*) music_l ();
}
-bool
-Request_chord_iterator::next ()
+SCM
+Request_chord_iterator::get_music (Moment) const
{
- if (first_b_)
- first_b_ = false;
- else
- last_b_ = true;
- return ok ();
+ SCM s = SCM_EOL;
+ if (last_processed_mom_ < Moment (0))
+ {
+ Music_sequence * ms = dynamic_cast<Music_sequence*> (music_l ());
+
+ 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 (Moment)
+Request_chord_iterator::process (Moment m)
{
-#if 0
- // URG
- if (first_b_)
+ if (last_processed_mom_ < Moment (0))
{
- for (SCM s = dynamic_cast<Music_sequence *> (get_music ())->music_list (); gh_pair_p (s); s = gh_cdr (s))
+ for (SCM s = dynamic_cast<Music_sequence *> (music_l ())->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)));
- }
- }
+ Music *mus = unsmob_music (ly_car (s));
- next ();
-#endif
+ bool gotcha = try_music (mus);
+ if (!gotcha)
+ mus->origin ()->warning (_f ("Junking request: `%s'", classname (mus)));
+ }
+ }
+ skip (m);
}
+
+IMPLEMENT_CTOR_CALLBACK (Request_chord_iterator);