]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/input-register.cc
release: 0.0.68pre
[lilypond.git] / lily / input-register.cc
index 4d0d24902a602f2c5c7ac692bf5fbc3b3a7bd002..f946e622fe9e1d4413bbecc770f46b2b84233c7d 100644 (file)
 
   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
 */
+
 #include "debug.hh"
 #include "register.hh"
 #include "input-register.hh"
-Input_register::~Input_register()
-{}
+#include "parray.hh"
+#include "input-register.hh"
+#include "register-group.hh"
 
-Input_register::Input_register()
+void
+Input_register::print() const
 {
+#ifndef NPRINT
+    mtor << "name " << name_str_;
+    mtor << "Consists of ";
+    for (int i=0; i< consists_str_arr_.size(); i++)
+       mtor << consists_str_arr_[i] << ',';
+    mtor << "contains " ;
+    for (iter(contains_ireg_p_list_.top(), i); i.ok(); i++) 
+       i->print();
+#endif 
 }
 
-bool
-Input_register::group_b()const
+/*
+  UGH. Global.
+ */
+Link_array<Input_register> iregs_p_arr;
+
+void
+add_global_input_register(Input_register *reg_p)
 {
-    return ireg_list_.size();
+    iregs_p_arr.push(reg_p);
 }
 
-Array<String>
-Input_register::get_nongroups_str_arr()const
+Input_register *
+lookup_reg(String nm)
 {
-    Array<String> s_arr;
-    for (iter_top(ireg_list_, i); i.ok(); i++) {
-       if (!i->group_b())
-           s_arr.push(i->name_str_);
-    }
-    return s_arr;
+    for (int i=0; i < iregs_p_arr.size(); i++)
+       if (iregs_p_arr[i]->name_str_ == nm)
+           return iregs_p_arr[i];
+
+    error("can't find reg `" + nm + "'");
 }
 
-Input_register*
-Input_register::get_ireg_l(String nm)const
+Input_register *
+Input_register::recursive_find(String nm)
+{
+    if ( nm == name_str_)
+       return this;
+
+    Input_register * r =0;
+    for (iter(contains_ireg_p_list_.top(), i); !r &&i.ok(); i++)
+       r = i->recursive_find(nm);
+
+    return r;
+}
+Input_register *
+Input_register::find_ireg_l(String nm)
 {
-    for (iter_top(ireg_list_, i); i.ok(); i++) {
+    for (iter(contains_ireg_p_list_.top(), i); i.ok(); i++)
        if (i->name_str_ == nm)
            return i;
-    }
+
     return 0;
 }
-Array<Request_register*>
-Input_register::get_nongroup_p_arr() const 
+
+
+Register_group_register *
+Input_register::get_group_register_p()
 {
-    Array <Request_register*>a;
-    Array<String> sa(get_nongroups_str_arr());
-    for (int i=0; i < sa.size(); i++)
-       a.push(get_nongroup_register_p(sa[i]));
-    return a;
+    Register_group_register * reg_p = (Register_group_register*)
+       get_register_p(name_str_);
+
+    
+     
+    for (int i=0; i < consists_str_arr_.size(); i++) {
+       reg_p->add( get_register_p( consists_str_arr_[i]) );
+    }
+    reg_p -> ireg_l_ = this;
+    return reg_p;
 }
 
-void
-Input_register::add(Input_register *p)
+
+bool
+Input_register::accept_req_b()
 {
-    ireg_list_.bottom().add(p);
+    return ! contains_ireg_p_list_.size();
 }
 
 void
-Input_register::print() const
+Input_register::add(Input_register *ip)
 {
-#ifndef NPRINT
-    mtor << name_str_ << " { ";
-    for (iter_top(ireg_list_, i); i.ok(); i++)
-       i->print();
-    mtor <<" }\n";
-#endif 
+    contains_ireg_p_list_.bottom().add(ip);
 }
-       
 
-Input_register::Input_register(Input_register const&s)
-    : Input(s)
+Input_register*
+Input_register::get_default_ireg_l()
 {
-    name_str_ = s.name_str_;
-    for (iter_top(s.ireg_list_, i); i.ok(); i++)
-       add(new Input_register(*i.ptr()));
+    return contains_ireg_p_list_.top();
 }