void
System::derived_mark () const
{
- if (!all_elements_->empty ())
- {
- Grob **ptr = &all_elements_->array_reference ()[0];
- Grob **end = ptr + all_elements_->size ();
- while (ptr < end)
- {
- scm_gc_mark ((*ptr)->self_scm ());
- ptr++;
- }
- }
+ const vector <Grob *> &arr = all_elements_->array ();
+ for (vsize i = arr.size (); i--;)
+ scm_gc_mark (arr[i]->self_scm ());
if (pscore_)
scm_gc_mark (pscore_->self_scm ());
vector<Grob *> vertical_skyline_grobs;
extract_grob_set (me_grob, "elements", my_elts);
for (vsize i = 0; i < my_elts.size (); i++)
- if (System_start_delimiter::has_interface (my_elts[i]))
+ if (has_interface<System_start_delimiter> (my_elts[i]))
vertical_skyline_grobs.push_back (my_elts[i]);
System *me = dynamic_cast<System *> (me_grob);
extract_grob_set (align, "elements", elts);
for (vsize i = 0; i < elts.size (); i++)
- if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ if (has_interface<Hara_kiri_group_spanner> (elts[i]))
vertical_skyline_grobs.push_back (elts[i]);
SCM grobs_scm = Grob_array::make_array ();
extract_grob_set (me, "elements", elts);
Grob *ret = 0;
for (vsize i = 0; i < elts.size (); i++)
- if (Align_interface::has_interface (elts[i]))
+ if (has_interface<Align_interface> (elts[i]))
{
if (ret)
me->programming_error ("found multiple vertical alignments in this system");
vsize end = (dir == UP) ? elts.size () : VPOS;
for (vsize i = start; i != end; i += dir)
{
- if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ if (has_interface<Hara_kiri_group_spanner> (elts[i]))
Hara_kiri_group_spanner::consider_suicide (elts[i]);
Interval intersection = elts[i]->extent (this, X_AXIS);
if (elts[i] == vertical_axis_group)
return out;
- if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ if (has_interface<Hara_kiri_group_spanner> (elts[i]))
Hara_kiri_group_spanner::consider_suicide (elts[i]);
bounds.intersect (elts[i]->spanned_rank_interval ());
for (vsize i = 0; i < elts.size (); ++i)
{
- if (!Axis_group_interface::has_interface (elts[i]))
+ if (!has_interface<Axis_group_interface> (elts[i]))
{
relevant_grobs.push_back (elts[i]);