lilypond-0.0.62
[lilypond.git] / lily / register-group.cc
blob6e516df21b3afc5d1642db0d1edfe5202cf5e7ce
1 /*
2 registergroup.cc -- implement Register_group_register
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
9 #include "proto.hh"
10 #include "plist.hh"
11 #include "register-group.hh"
12 #include "register.hh"
14 bool
15 Register_group_register::acceptable_request_b(Request* r)const
17 for (iter_top(reg_list_, i); i.ok(); i++) {
18 if (i->acceptable_request_b(r))
19 return true;
21 return false;
24 void
25 Register_group_register::set_feature(Feature d)
27 iter_top(reg_list_, i);
28 while (i.ok()) {
29 // this construction to ensure clean deletion
30 Request_register *reg_l = i++;
31 reg_l->set_feature(d);
35 void
36 Register_group_register::sync_features()
38 iter_top(reg_list_, i);
39 while (i.ok()) {
41 Request_register *reg_l = i++;
42 reg_l->sync_features();
46 void
47 Register_group_register::pre_move_processing()
49 iter_top(reg_list_, i);
50 while (i.ok()) {
51 // this construction to ensure clean deletion
52 Request_register *reg_l = i++;
53 reg_l->pre_move_processing();
57 void
58 Register_group_register::process_requests()
60 iter_top(reg_list_, i);
61 while (i.ok()) {
62 // this construction to ensure clean deletion
63 Request_register *reg_l = i++;
64 reg_l->process_requests();
68 void
69 Register_group_register::post_move_processing()
71 iter_top(reg_list_, i);
72 while (i.ok()) {
73 // this construction to ensure clean deletion
74 Request_register *reg_l = i++;
75 reg_l->post_move_processing();
79 void
80 Register_group_register::acknowledge_element(Staff_elem_info info)
82 Request_register* origin = info.origin_reg_l_arr_[0];
83 if (!contains_b(origin) && !origin->contains_b(this)) // am i sure?
84 return;
86 for (iter_top(reg_list_, i); i.ok(); i++)
87 i->acknowledge_element(info);
90 bool
91 Register_group_register::contains_b(Request_register* reg_l)const
93 bool parent_b = Request_register::contains_b(reg_l);
95 if (parent_b)
96 return true;
97 for (iter_top(reg_list_, j); j.ok(); j++)
98 if (j->contains_b(reg_l))
99 return true;
100 return false;
105 bool
106 Register_group_register::try_request(Request*req_l)
108 iter_top(reg_list_, i);
109 while (i.ok()) {
112 // this construction to ensure clean deletion
113 Request_register *reg_l = i++;
114 if (reg_l->try_request( req_l ))
115 return true;
117 return false;
119 void
120 Register_group_register::add(Array<Request_register*> p_arr)
122 for (int i =0; i<p_arr.size(); i++)
123 add(p_arr[i]);
126 void
127 Register_group_register::add(Request_register *reg_p)
129 reg_list_.bottom().add(reg_p);
130 reg_p->daddy_reg_l_ = this;
134 Register_group_register::~Register_group_register()
139 Request_register *
140 Register_group_register::get_register_p(Request_register*reg_l)
142 iterator(reg_list_) reg_cur= reg_list_.find(reg_l);
143 assert(reg_cur.ok());
144 return reg_cur.remove_p();
147 void
148 Register_group_register::terminate_register(Request_register*r_l)
150 delete get_register_p(r_l);
153 IMPLEMENT_STATIC_NAME(Register_group_register);
154 ADD_THIS_REGISTER(Register_group_register);
156 void
157 Register_group_register::do_print()const
159 #ifndef NPRINT
160 for (iter_top(reg_list_, i); i.ok(); i++)
161 i->print();
162 #endif