2 voicegroup.cc -- implement Voice_group_registers
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
11 #include "musical-request.hh"
12 #include "voice-regs.hh"
13 #include "voice-group-regs.hh"
14 #include "register.hh"
15 #include "complex-walker.hh"
16 #include "command-request.hh"
18 #include "input-register.hh"
20 static int temp_id_count;
22 Voice_group_registers::Voice_group_registers(String id,
23 Input_register const *ireg_C)
27 Register_group_register::add(ireg_C->get_nongroup_p_arr());
29 id = __FUNCTION__ + String(temp_id_count++);
35 Voice_group_registers::try_request(Request*r_l)
37 for (int i=0; i < voice_reg_l_arr_.size(); i++) {
38 if (voice_reg_l_arr_[i]->voice_l_ == r_l->voice_l())
39 goto gotcha; // yeah, yeah, I know
43 Command_req* c_l = r_l->command();
44 if (c_l&& c_l->groupfeature()) {
46 f.type_ = c_l->groupfeature()->type_str_;
47 f.value_ = c_l->groupfeature()->value_str_;
51 return Register_group_register::try_request(r_l);
55 IMPLEMENT_STATIC_NAME(Voice_group_registers);
58 Voice_group_registers::do_print() const
61 mtor << "ID: " << group_id_str_<<"\n";
62 mtor << "stopping at " << termination_mom_ << "\n";
63 Register_group_register::do_print();
67 Voice_group_registers::add(Request_register*r_l)
69 Register_group_register::add(r_l);
70 if (r_l->name() == Voice_registers::static_name()) {
71 Voice_registers * vregs_l = (Voice_registers*)r_l;
72 voice_reg_l_arr_.push( vregs_l );
73 Voice *v_l = vregs_l->voice_l_;
74 termination_mom_ = termination_mom_ >? v_l -> last();
75 mtor << "adding Voice_registers, now terminating at " <<
76 termination_mom_<< "\n";
82 Voice_group_registers::post_move_processing()
84 if ( get_staff_info().time_C_ ->when_ > termination_mom_ ){
85 mtor << "Terminating voice_group\n";
86 daddy_reg_l_->terminate_register(this);
89 Register_group_register::post_move_processing();
93 Voice_group_registers::get_register_p(Request_register *reg_l)
95 if (reg_l->name() == Voice_registers::static_name()) {
96 for (int i=0; i <voice_reg_l_arr_.size(); i++) {
97 if (reg_l == voice_reg_l_arr_[i])
98 voice_reg_l_arr_.del(i);
101 Request_register*reg_p =Register_group_register::get_register_p(reg_l);
108 Voice_group_registers::OK() const
110 for (int i=0; i < voice_reg_l_arr_.size(); i++) {
111 iter(reg_list_.find(voice_reg_l_arr_[i]), j);
118 Voice_group_registers::set_feature(Feature f)
120 if (f.type_ == "vdir")
122 Register_group_register::set_feature(f);
126 Voice_group_registers::get_feature(String f)
130 Register_group_register::get_feature(f);