]> git.donarmstrong.com Git - lilypond.git/blob - lily/registergroup.cc
release: 0.0.39-1
[lilypond.git] / lily / registergroup.cc
1 /*
2   registergroup.cc -- implement Register_group_register
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "proto.hh"
10 #include "plist.hh"
11 #include "registergroup.hh"
12 #include "register.hh"
13
14 bool
15 Register_group_register::acceptable_request_b(Request* r)
16 {
17     for (iter_top(reg_list_, i); i.ok(); i++) {
18         if (i->acceptable_request_b(r))
19             return true;
20     }
21     return false;
22 }
23
24 void
25 Register_group_register::set_feature(Features d)
26 {
27     for (iter_top(reg_list_, i); i.ok(); i++) {
28         i->set_feature(d);
29     }
30 }
31
32 void
33 Register_group_register::pre_move_processing()
34 {
35     for (iter_top(reg_list_, i); i.ok(); i++) 
36         i->pre_move_processing();
37 }
38
39 void
40 Register_group_register::process_requests()
41 {
42     for (iter_top(reg_list_, i); i.ok(); i++) 
43         i->process_requests();
44 }
45
46 void
47 Register_group_register::post_move_processing()
48 {
49     for (iter_top(reg_list_, i); i.ok(); i++) 
50         i->post_move_processing();
51 }
52
53 void
54 Register_group_register::acknowledge_element(Staff_elem_info info)
55 {
56     if (!contains_b(info.origin_reg_l_arr_[0]))
57         return;
58     
59     for (iter_top(reg_list_, i); i.ok(); i++) 
60         i->acknowledge_element(info);
61 }
62
63 bool
64 Register_group_register::contains_b(Request_register* reg_l)
65 {
66     bool parent_b = Request_register::contains_b(reg_l);
67     
68     if (parent_b)
69         return true;
70     for (iter_top(reg_list_, j); j.ok(); j++)
71         if (j->contains_b(reg_l))
72             return true;
73     return false;
74 }
75         
76
77
78 bool
79 Register_group_register::try_request(Request*req_l)
80 {
81     for (iter_top(reg_list_, i); i.ok(); i++) 
82         if (i->try_request(req_l))
83             return true;
84     return false;
85 }
86
87 void
88 Register_group_register::add(Request_register *reg_p)
89 {
90     reg_list_.bottom().add(reg_p);
91     reg_p->daddy_reg_l_ = this;
92 }
93
94
95 Register_group_register::~Register_group_register()
96 {
97     
98 }
99
100 Request_register *
101 Register_group_register::get_register_p(Request_register*reg_l)
102 {
103     iterator(reg_list_) reg_cur= reg_list_.find(reg_l);
104     assert(reg_cur.ok());
105     return reg_cur.remove_p();
106 }
107
108 void
109 Register_group_register::terminate_register(Request_register*r_l)
110 {
111     delete get_register_p(r_l);
112 }
113
114 void
115 Register_group_register::do_print()const
116 {
117 #ifndef NPRINT
118     for (iter_top(reg_list_, i); i.ok(); i++) 
119         i->print();
120 #endif
121 }