X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column.cc;h=da3807c31d6f4ddb33fb75edf69c24ec3baf8175;hb=8daf5df7cb4ebb293518019c9d30550bad6fa493;hp=3ea5a89f0538a37b236c412e9744ba5a378ad61f;hpb=cee6cea4ed55eb4fa1f9d83c997ebc19744a6e1a;p=lilypond.git diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 3ea5a89f05..da3807c31d 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -390,6 +390,11 @@ Paper_column::print (SCM p) return t.smobbed_copy (); } +static bool grob_is_live (const Grob *g) +{ + return g && g->is_live (); +} + /* This is all too hairy. We use bounded-by-me to make sure that some columns are kept "alive". Unfortunately, when spanners are suicided, @@ -404,21 +409,8 @@ Paper_column::before_line_breaking (SCM grob) { Grob *me = unsmob (grob); - SCM bbm = me->get_object ("bounded-by-me"); - Grob_array *ga = unsmob (bbm); - if (!ga) - return SCM_UNSPECIFIED; - - vector &array (ga->array_reference ()); - - for (vsize i = array.size (); i--;) - { - Grob *g = array[i]; - - if (!g || !g->is_live ()) - /* UGH . potentially quadratic. */ - array.erase (array.begin () + i); - } + if (Grob_array *ga = unsmob (me->get_object ("bounded-by-me"))) + ga->filter (grob_is_live); return SCM_UNSPECIFIED; }