]> git.donarmstrong.com Git - lilypond.git/blob - lily/performer-group-performer.cc
2003 -> 2004
[lilypond.git] / lily / performer-group-performer.cc
1 /*
2   performer-group-performer.cc -- implement Performer_group_performer
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1996--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7                Jan Nieuwenhuizen <janneke@gnu.org>
8  */
9
10 #include "performer-group-performer.hh"
11
12 #include "audio-element.hh"
13 #include "warn.hh"
14
15
16 ENTER_DESCRIPTION(Performer_group_performer,
17 /* descr */       "",
18 /* creats*/       "",
19 /* accepts */     "",
20 /* acks  */      "",
21 /* reads */       "",
22 /* write */       "");
23
24
25
26 void
27 Performer_group_performer::announce_element (Audio_element_info info)
28 {
29   announce_infos_.push (info);
30   Performer::announce_element (info);
31 }
32
33
34
35 void
36 Performer_group_performer::create_audio_elements ()
37 {
38   for (SCM p = get_simple_trans_list (); gh_pair_p (p); p = ly_cdr (p))
39     {
40       Translator * t = unsmob_translator (ly_car (p));
41       Performer * eng = dynamic_cast<Performer*> (t);
42       if (eng)
43         eng->create_audio_elements ();
44     }
45 }
46
47 void
48 Performer_group_performer::acknowledge_audio_elements ()
49 {
50   for (int j =0; j < announce_infos_.size (); j++)
51     {
52       Audio_element_info info = announce_infos_[j];
53
54       for (SCM p = get_simple_trans_list (); gh_pair_p (p); p = ly_cdr (p))
55         {
56           Translator * t = unsmob_translator (ly_car (p));
57           Performer * eng = dynamic_cast<Performer*> (t);
58           if (eng && eng!= info.origin_trans_)
59             eng->acknowledge_audio_element (info);
60         }
61     }
62 }
63
64 void
65 Performer_group_performer::do_announces ()
66 {
67   for (SCM p = trans_group_list_; gh_pair_p (p); p =ly_cdr (p))
68     {
69       Translator * t = unsmob_translator (ly_car (p));
70       dynamic_cast<Performer_group_performer*> (t)->do_announces ();
71     }
72
73   
74   create_audio_elements ();
75     
76   while (announce_infos_.size ())
77     {
78       acknowledge_audio_elements ();
79       announce_infos_.clear ();
80       create_audio_elements ();
81     }
82
83   if (announce_infos_.size ())
84     {
85 #if 0  //printf?  -> include <stdio.h>     
86       printf ("do_announces: elt: %s\n",
87               classname (announce_infos_[0].elem_));
88 #endif      
89       announce_infos_.clear ();
90     }
91 }
92
93 Performer_group_performer::Performer_group_performer(){}