-
-Engraver *
-Engraver_group_engraver::remove_engraver_p(Engraver*grav_l)
-{
- group_l_arr_.substitute((Engraver_group_engraver*)grav_l,0);
- nongroup_l_arr_.substitute(grav_l,0);
- PCursor<Engraver*> grav_cur( grav_list_.find(grav_l) );
-
- return grav_cur.remove_p();
-}
-
-void
-Engraver_group_engraver::terminate_engraver(Engraver*r_l)
-{
- mtor << "Removing " << r_l->name() << " at " << get_staff_info().when() << "\n";
- r_l->removal_processing();
- Engraver * grav_p =remove_engraver_p(r_l);
-
- delete grav_p;
-}
-
-IMPLEMENT_IS_TYPE_B2(Engraver_group_engraver,Engraver, Translator);
-
-ADD_THIS_ENGRAVER(Engraver_group_engraver);
-
-void
-Engraver_group_engraver::do_print()const
-{
-#ifndef NPRINT
- if ( !check_debug)
- return ;
- mtor << "ID: " << id_str_ ;
- mtor << " iterators: " << iterator_count_<< "\n";
- for (PCursor<Engraver*> i(grav_list_.top()); i.ok(); i++)
- i->print();
-#endif
-}
-
-
-Engraver_group_engraver*
-Engraver_group_engraver::find_engraver_l(String n, String id)
-{
- if (name() == n && id_str_ == id)
- return this;
- Engraver_group_engraver * r = 0;
- for (int i =0; !r && i< group_l_arr_.size(); i++) {
- r = group_l_arr_[i]->find_engraver_l(n,id);
+/*
+ Ugh. This is slightly expensive. We could/should cache the value of
+ the group count?
+*/
+int
+Engraver_group::pending_grob_count () const
+{
+ int count = announce_infos_.size ();
+ for (SCM s = context_->children_contexts ();
+ scm_is_pair (s); s = scm_cdr (s))
+ {
+ Context *c = unsmob_context (scm_car (s));
+ Engraver_group *group
+ = dynamic_cast<Engraver_group *> (c->implementation ());
+
+ if (group)
+ count += group->pending_grob_count ();