]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/translator-group.cc
release: 1.3.28
[lilypond.git] / lily / translator-group.cc
index f74aef58d486713d37c55ac67c68f85598575aa2..743f843cb29224c93f4dc04a353c9a49a47c4e50 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "music-output-def.hh"
@@ -40,13 +40,16 @@ Translator_group::Translator_group()
 void
 Translator_group::check_removal()
 {
-  Link_array<Translator_group> groups (group_l_arr ());
-  
-  for (int i =0; i < groups.size(); i++)
+  Cons<Translator> *next =0;
+  for (Cons<Translator> *p = trans_p_list_.head_; p; p = next)
     {
-      groups[i]->check_removal();
-      if (groups[i]->removable_b())
-       terminate_translator (groups[i]);
+      next = p->next_;
+      if (Translator_group *trg =  dynamic_cast <Translator_group *> (p->car_))
+       {
+         trg->check_removal ();
+         if (trg->removable_b())
+           terminate_translator (trg);
+       }
     }
 }
 
@@ -126,11 +129,11 @@ Translator_group::find_existing_translator_l (String n, String id)
   if (is_alias_b (n) && (id_str_ == id || id.empty_b ()))
     return this;
 
-  Link_array<Translator_group> groups (group_l_arr ());
   Translator_group* r = 0;
-  for (int i =0; !r && i < groups.size(); i++)
+  for (Cons<Translator> *p = trans_p_list_.head_; !r && p; p = p->next_)
     {
-      r = groups[i]->find_existing_translator_l (n,id);
+      if (Translator_group *trg =  dynamic_cast <Translator_group *> (p->car_))
+       r = trg->find_existing_translator_l (n, id);
     }
 
   return r;
@@ -215,10 +218,13 @@ Translator_group::try_music_on_nongroup_children (Music *m)
 {
   bool hebbes_b =false;
 
-  Link_array<Translator> nongroups (nongroup_l_arr ());
-  
-  for (int i =0; !hebbes_b && i < nongroups.size() ; i++)
-    hebbes_b =nongroups[i]->try_music (m);
+  for (Cons<Translator> *p = trans_p_list_.head_; !hebbes_b && p; p = p->next_)
+    {
+      if (!dynamic_cast <Translator_group *> (p->car_))
+       {
+         hebbes_b = p->car_->try_music (m);
+       }
+    }
   return hebbes_b;
 }
 
@@ -247,37 +253,13 @@ Translator_group::ancestor_l (int level)
   return daddy_trans_l_->ancestor_l (level-1);
 }
 
-Link_array<Translator_group>
-Translator_group::group_l_arr () const
-{
-  Link_array<Translator_group> groups;
-  for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
-    {
-      if (dynamic_cast <Translator_group *> (p->car_))
-       groups.push (dynamic_cast <Translator_group *> (p->car_));
-    }
-  return groups;
-}
 
-Link_array<Translator>
-Translator_group::nongroup_l_arr () const
-{
-  Link_array<Translator> groups;
-  for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
-    {
-      if (!dynamic_cast <Translator_group *> (p->car_))
-       groups.push (p->car_);
-    }
-  return groups;
-}
-/**
-   End translator: call "destructor", remove from hierarchy, and delete
- */
+
+
 
 void
 Translator_group::terminate_translator (Translator*r_l)
 {
-  DEBUG_OUT << "Removing " << classname (r_l) << " at " << now_mom () << '\n';
   r_l->removal_processing();
   Translator * trans_p =remove_translator_p (r_l);
 
@@ -310,11 +292,10 @@ Translator_group::remove_translator_p (Translator*trans_l)
 Translator*
 Translator_group::get_simple_translator (String type) const
 {
-  Link_array<Translator> nongroups (nongroup_l_arr ());
-  for (int i=0; i < nongroups.size(); i++)
+  for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
     {
-      if (classname (nongroups[i]) == type)
-       return nongroups[i];
+      if (classname (p->car_) == type)
+       return p->car_;
     }
   if (daddy_trans_l_)
     return daddy_trans_l_->get_simple_translator (type);
@@ -454,7 +435,7 @@ Translator_group::get_property (SCM sym, Translator_group **where_l) const
     {
       if (where_l)
        *where_l = (Translator_group*) this; // ugh
-      return properties_dict_[sym];
+      return properties_dict_.get (sym);
     }
 
   if (daddy_trans_l_)
@@ -469,5 +450,5 @@ Translator_group::get_property (SCM sym, Translator_group **where_l) const
 void
 Translator_group::set_property (String id, SCM val)
 {
-  properties_dict_[ly_symbol (id)] = val;
+  properties_dict_.set (ly_symbol2scm (id.ch_C()), val);
 }