X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fperformer-group-performer.cc;h=6bc925a1bd18d5aeefc877672e67ca419529863d;hb=41e82f1eed38b69f60f74221c52ce14692318d6d;hp=55c5e18994f0092c53627ce81f3025829c5cec49;hpb=5e98b3e282d175f1908dc3017412431f443642c1;p=lilypond.git diff --git a/lily/performer-group-performer.cc b/lily/performer-group-performer.cc index 55c5e18994..6bc925a1bd 100644 --- a/lily/performer-group-performer.cc +++ b/lily/performer-group-performer.cc @@ -1,189 +1,73 @@ /* performer-group-performer.cc -- implement Performer_group_performer - (c) 1996, 1997 Han-Wen Nienhuys - Jan Nieuwenhuizen + source file of the GNU LilyPond music typesetter + + (c) 1996--2000 Han-Wen Nienhuys + Jan Nieuwenhuizen */ #include "performer-group-performer.hh" -#include "input-translator.hh" + #include "debug.hh" -IMPLEMENT_IS_TYPE_B2(Performer_group_performer,Performer, Translator); -ADD_THIS_PERFORMER(Performer_group_performer); +ADD_THIS_TRANSLATOR(Performer_group_performer); -Performer_group_performer::Performer_group_performer() -{ -} -Performer_group_performer::~Performer_group_performer() +void +Performer_group_performer::announce_element (Audio_element_info info) { + announce_info_arr_.push (info); + Performer::announce_element (info); } void -Performer_group_performer::add( Performer *perf_p ) +Performer_group_performer::do_announces() { - perf_p_list_.bottom().add(perf_p); - perf_p->daddy_perf_l_ = this; - - if (perf_p->is_type_b(Performer_group_performer::static_name())) { - group_l_arr_.push((Performer_group_performer*)perf_p); - } else { - nongroup_l_arr_ .push(perf_p); + for (Cons *p = trans_p_list_.head_; p; p = p->next_) + { + if (Performer_group_performer *trg = dynamic_cast (p->car_)) + trg->do_announces (); } -} - -Translator* -Performer_group_performer::ancestor_l( int l ) -{ - if (!l || !daddy_perf_l_) - return this; - - return daddy_perf_l_->ancestor_l( l - 1 ); -} - -int -Performer_group_performer::depth_i() const -{ - return daddy_perf_l_->depth_i() + 1; -} - -Translator* -Performer_group_performer::find_get_translator_l( String n,String id ) -{ - Translator * ret=0; - Input_translator* itrans_l= itrans_l_-> recursive_find ( n ); - if (itrans_l ) { - ret = find_performer_l(n,id); - if (!ret) { - Performer_group_performer * group = - itrans_l-> get_group_performer_p(); - - add(group); - ret = group; - - if (group->itrans_l_->is_name_b( n ) ) - ret ->id_str_ = id; - else - return ret->find_get_translator_l(n,id); + + Request dummy_req; + + while (announce_info_arr_.size ()) + { + for (int j =0; j < announce_info_arr_.size(); j++) + { + Audio_element_info info = announce_info_arr_[j]; + + if (!info.req_l_) + info.req_l_ = &dummy_req; + + 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 (this).size () + && eng!= info.origin_trans_l_arr (this)[0]) + eng->acknowledge_element (info); + } + } + announce_info_arr_.clear (); + + + 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 (); + } + } } - } else if (daddy_perf_l_) - ret =daddy_perf_l_->find_get_translator_l(n,id); - else { - warning("Can't find or create `" + n + "' called `" + id + "'\n"); - ret =0; } - return ret; } -Performer_group_performer* -Performer_group_performer::find_performer_l( String n, String id ) -{ - if (name() == n && id_str_ == id) - return this; - Performer_group_performer * r = 0; - for (int i =0; !r && i< group_l_arr_.size(); i++) { - r = group_l_arr_[i]->find_performer_l(n,id); - } - - return r; -} - -Translator* -Performer_group_performer::get_default_interpreter() -{ - // ? - if ( is_bottom_performer_b() ) - return daddy_perf_l_->get_default_interpreter(); - - Performer_group_performer *perf_p= itrans_l_-> - get_default_itrans_l()->get_group_performer_p(); - add(perf_p ); - if (perf_p->is_bottom_performer_b()) - return perf_p; - else - return perf_p->get_default_interpreter(); -} - -Moment -Performer_group_performer::get_mom() const -{ - Moment mom = Performer::get_mom(); - - for ( int i = 0; i < nongroup_l_arr_.size(); i++ ) - nongroup_l_arr_[ i ]->set( mom ); - - return mom; -} - -bool -Performer_group_performer::is_bottom_performer_b() const -{ - return !itrans_l_->get_default_itrans_l(); -} - - -void -Performer_group_performer::process_requests() -{ - for ( PCursor i( perf_p_list_.top() ); i.ok(); i++ ) - i->process_requests(); -} - -// -int -Performer_group_performer::get_track_i() const -{ - int track_i = Performer::get_track_i(); - - for ( int i = 0; i < nongroup_l_arr_.size(); i++ ) - nongroup_l_arr_[ i ]->set_track( track_i ); - - return track_i; -} - -void -Performer_group_performer::set_track( int& track_i_r ) -{ - for ( PCursor i( perf_p_list_.top() ); i.ok(); i++ ) - i->set_track( track_i_r ); -} -// - -bool -Performer_group_performer::do_try_request( Request* req_l ) -{ - bool hebbes_b =false; - for (int i =0; !hebbes_b && i < nongroup_l_arr_.size() ; i++) - hebbes_b =nongroup_l_arr_[i]->try_request(req_l); - if ( !hebbes_b && daddy_perf_l_ ) - hebbes_b = daddy_perf_l_->try_request(req_l); - return hebbes_b ; -} - -void -Performer_group_performer::do_print()const -{ -#ifndef NPRINT - if ( !check_debug) - return ; - for ( PCursor i( perf_p_list_.top() ); i.ok(); i++ ) - i->print(); -#endif -} - -void -Performer_group_performer::do_creation_processing() -{ - for ( PCursor i( perf_p_list_.top() ); i.ok(); i++ ) - i->creation_processing(); -} - -void -Performer_group_performer::do_removal_processing() -{ - for ( PCursor i( perf_p_list_.top() ); i.ok(); i++ ) - i->do_removal_processing(); -}