X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fperformer-group-performer.cc;h=f93defe07cf2751623b284e0e2b1e7b28d092462;hb=db4dd36b622417b5fe4c4a4660402e0ac7b5beb1;hp=583c59a936d5f4fe36808cbd6e1958e247f590dc;hpb=bb36bac02a64770871780231ecc709cb18b20932;p=lilypond.git diff --git a/lily/performer-group-performer.cc b/lily/performer-group-performer.cc index 583c59a936..f93defe07c 100644 --- a/lily/performer-group-performer.cc +++ b/lily/performer-group-performer.cc @@ -3,71 +3,83 @@ source file of the GNU LilyPond music typesetter - (c) 1996, 1997--2000 Han-Wen Nienhuys + (c) 1996--2004 Han-Wen Nienhuys Jan Nieuwenhuizen */ #include "performer-group-performer.hh" +#include "context.hh" +#include "audio-element.hh" +#include "warn.hh" -#include "debug.hh" +ENTER_DESCRIPTION (Performer_group_performer, +/* descr */ "", +/* creats*/ "", +/* accepts */ "", +/* acks */ "", +/* reads */ "", +/* write */ ""); -ADD_THIS_TRANSLATOR(Performer_group_performer); void Performer_group_performer::announce_element (Audio_element_info info) { - announce_info_arr_.push (info); - Performer::announce_element (info); + announce_infos_.push (info); + Translator *t + = context ()->get_parent_context ()->implementation (); + + if (Performer_group_performer * eg = dynamic_cast (t)) + eg->announce_element (info); } void -Performer_group_performer::do_announces() +Performer_group_performer::acknowledge_audio_elements () { - for (Cons *p = trans_p_list_.head_; p; p = p->next_) + for (int j =0; j < announce_infos_.size (); j++) { - if (Performer_group_performer *trg = dynamic_cast (p->car_)) - trg->do_announces (); - } - - - Request dummy_req; + Audio_element_info info = announce_infos_[j]; - while (announce_info_arr_.size ()) - { - for (int j =0; j < announce_info_arr_.size(); j++) + for (SCM p = get_simple_trans_list (); scm_is_pair (p); p = scm_cdr (p)) { - Audio_element_info info = announce_info_arr_[j]; - - if (!info.req_l_) - info.req_l_ = &dummy_req; + Translator * t = unsmob_translator (scm_car (p)); + Performer * eng = dynamic_cast (t); + if (eng && eng!= info.origin_trans_) + eng->acknowledge_audio_element (info); + } + } +} - for (Cons *p = trans_p_list_.head_; p; p = p->next_) - { - if (!dynamic_cast (p->car_)) - { - Performer * eng = dynamic_cast (p->car_); - // urg, huh? core dump? - //if (eng && eng!= info.origin_trans_l_arr_[0]) - if (eng && info.origin_trans_l_arr_.size () - && eng!= info.origin_trans_l_arr_[0]) - eng->acknowledge_element (info); - } - } - announce_info_arr_.clear (); - +void +Performer_group_performer::do_announces () +{ + while (1) + { + create_audio_elements (); + performer_each (get_simple_trans_list (), + &Performer::create_audio_elements); + + if (!announce_infos_.size ()) + break ; - for (Cons *p = trans_p_list_.head_; p; p = p->next_) - { - if (!dynamic_cast (p->car_)) - { - Performer * eng = dynamic_cast (p->car_); - if (eng) - eng->process_acknowledged (); - } - } - } + acknowledge_audio_elements (); + announce_infos_.clear (); } } +Performer_group_performer::Performer_group_performer () +{ +} + + +void +performer_each (SCM list, Performer_method method) +{ + for (SCM p = list; scm_is_pair (p); p = scm_cdr (p)) + { + Performer * e = dynamic_cast(unsmob_translator (scm_car (p))); + if (e) + (e->*method) (); + } +}