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"
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);
+ }
}
}
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;
{
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;
}
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);
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);
{
if (where_l)
*where_l = (Translator_group*) this; // ugh
- return properties_dict_[sym];
+ return properties_dict_.get (sym);
}
if (daddy_trans_l_)
void
Translator_group::set_property (String id, SCM val)
{
- properties_dict_[ly_symbol (id)] = val;
+ properties_dict_.set (ly_symbol2scm (id.ch_C()), val);
}