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 ());
handle_broken_dependencies ();
- /* Because the this->get_property (all-elements) contains items in 3
+ /* Because the get_property (all-elements) contains items in 3
versions, handle_broken_dependencies () will leave duplicated
items in all-elements. Strictly speaking this is harmless, but
it leads to duplicated symbols in the output. uniq makes sure
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 ();
int st = Paper_column::get_rank (c[0]);
int end = Paper_column::get_rank (c.back ());
- Interval iv (pure_height (this, st, end));
+ Interval iv (pure_y_extent (this, st, end));
system->set_property ("pure-Y-extent", ly_interval2scm (iv));
system->set_bound (LEFT, c[0]);
vector<Grob *> all_elts_sorted (all_elements_->array ());
uniquify (all_elts_sorted);
- this->get_stencil ();
+ get_stencil ();
for (vsize i = all_elts_sorted.size (); i--;)
{
Grob *g = all_elts_sorted[i];
}
}
- Grob *left_bound = this->get_bound (LEFT);
+ Grob *left_bound = get_bound (LEFT);
SCM prop_init = left_bound->get_property ("line-break-system-details");
Prob *pl = make_paper_system (prop_init);
paper_system_set_stencil (pl, sys_stencil);
/* information that the page breaker might need */
- Grob *right_bound = this->get_bound (RIGHT);
- pl->set_property ("vertical-skylines", this->get_property ("vertical-skylines"));
+ Grob *right_bound = get_bound (RIGHT);
+ pl->set_property ("vertical-skylines", get_property ("vertical-skylines"));
pl->set_property ("page-break-permission", right_bound->get_property ("page-break-permission"));
pl->set_property ("page-turn-permission", right_bound->get_property ("page-turn-permission"));
pl->set_property ("page-break-penalty", right_bound->get_property ("page-break-penalty"));
}
pl->set_property ("staff-refpoint-extent", ly_interval2scm (staff_refpoints));
- pl->set_property ("system-grob", this->self_scm ());
+ pl->set_property ("system-grob", self_scm ());
return pl->unprotect ();
}
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]);