lilypond-1.3.65
[lilypond.git] / lily / performer-group-performer.cc
blob6bc925a1bd18d5aeefc877672e67ca419529863d
1 /*
2 performer-group-performer.cc -- implement Performer_group_performer
4 source file of the GNU LilyPond music typesetter
6 (c) 1996--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 Jan Nieuwenhuizen <janneke@gnu.org>
8 */
10 #include "performer-group-performer.hh"
12 #include "debug.hh"
15 ADD_THIS_TRANSLATOR(Performer_group_performer);
18 void
19 Performer_group_performer::announce_element (Audio_element_info info)
21 announce_info_arr_.push (info);
22 Performer::announce_element (info);
25 void
26 Performer_group_performer::do_announces()
28 for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
30 if (Performer_group_performer *trg = dynamic_cast <Performer_group_performer *> (p->car_))
31 trg->do_announces ();
35 Request dummy_req;
37 while (announce_info_arr_.size ())
39 for (int j =0; j < announce_info_arr_.size(); j++)
41 Audio_element_info info = announce_info_arr_[j];
43 if (!info.req_l_)
44 info.req_l_ = &dummy_req;
46 for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
48 if (!dynamic_cast <Performer_group_performer *> (p->car_))
50 Performer * eng = dynamic_cast<Performer*> (p->car_);
51 // urg, huh? core dump?
52 //if (eng && eng!= info.origin_trans_l_arr ()[0])
53 if (eng && info.origin_trans_l_arr (this).size ()
54 && eng!= info.origin_trans_l_arr (this)[0])
55 eng->acknowledge_element (info);
58 announce_info_arr_.clear ();
61 for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
63 if (!dynamic_cast <Performer_group_performer *> (p->car_))
65 Performer * eng = dynamic_cast<Performer*> (p->car_);
66 if (eng)
67 eng->process_acknowledged ();