source file of the GNU LilyPond music typesetter
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "translator-group.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_l ()
{
- last_b_ = false;
- // cursor_ = elt_l ()->music_p_list_p_->head_;
- cursor_ = 0;
-}
+ assert (report_to_l ());
+ if (report_to_l ()->is_bottom_translator_b ())
+ return report_to_l ();
+ set_translator (report_to_l ()->get_default_interpreter ());
+ return report_to_l ();
+}
-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_l();
}
-Moment
-Request_chord_iterator::next_moment() const
+Request_chord*
+Request_chord_iterator::elt_l () const
{
- Moment m (0);
- if (!first_b_)
- m = elt_length_mom_;
- return m;
+ return (Request_chord*) music_l_;
}
-
-void
-Request_chord_iterator::do_print() const
+SCM
+Request_chord_iterator::get_music (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*> (music_l_);
+
+ for (SCM m = ms->music_list (); gh_pair_p (m); m = gh_cdr (m))
+ {
+ s = gh_cons (gh_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 (Cons<Music> *i = elt_l ()->music_p_list_p_->head_; i; i = i->next_)
+ for (SCM s = dynamic_cast<Music_sequence *> (music_l_)->music_list ();
+ gh_pair_p (s); s = gh_cdr (s))
{
- if (Request * req_l = dynamic_cast<Request*> (i->car_))
+ 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->warning (_f ("Junking request: `%s'", classname( req_l)));
+ req_l->origin ()->warning (_f ("Junking request: `%s'", classname( req_l)));
}
else
- i->car_->warning (_f ("Huh? Not a Request: `%s'",
- classname (i->car_)));
+ mus->origin ()->warning (_f ("Huh? Not a Request: `%s'",
+ classname (mus)));
}
- first_b_ = false;
}
-
- if (mom >= elt_length_mom_)
- last_b_ = true;
+ skip (m);
}