X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbreak-substitution.cc;h=e4d6a9a853d2a29a67d5d2934bb7a8834c8c3598;hb=208f3e9081446c3ae6121de80c02434dac1fd2aa;hp=764186ee3f07e003ff0e78a2ad249fd13842c8d9;hpb=75eebcb49e52d296b1da3e1074e0825d2c780db4;p=lilypond.git diff --git a/lily/break-substitution.cc b/lily/break-substitution.cc index 764186ee3f..e4d6a9a853 100644 --- a/lily/break-substitution.cc +++ b/lily/break-substitution.cc @@ -3,16 +3,16 @@ source file of the GNU LilyPond music typesetter - (c) 2001--2006 Han-Wen Nienhuys + (c) 2001--2009 Han-Wen Nienhuys */ #include #include using namespace std; -#include "grob-array.hh" #include "item.hh" #include "system.hh" +#include "grob-array.hh" static SCM break_criterion; void @@ -139,19 +139,19 @@ do_break_substitution (SCM src) /* Perform substitution on GROB_LIST using a constant amount of stack. */ -Link_array temporary_substition_array; +vector temporary_substition_array; void substitute_grob_array (Grob_array *grob_arr, Grob_array *new_arr) { - Link_array &old_grobs (grob_arr->array_reference ()); - Link_array *new_grobs (new_arr == grob_arr + vector &old_grobs (grob_arr->array_reference ()); + vector *new_grobs (new_arr == grob_arr ? & temporary_substition_array : &new_arr->array_reference ()); - new_grobs->set_size (old_grobs.size ()); - Grob **array = (Grob **) new_grobs->accesses (); + new_grobs->resize (old_grobs.size ()); + Grob **array = (Grob **) new_grobs->data (); Grob **ptr = array; - for (int i = 0; i < old_grobs.size (); i++) + for (vsize i = 0; i < old_grobs.size (); i++) { Grob *orig = old_grobs[i]; Grob *new_grob = substitute_grob (orig); @@ -159,7 +159,7 @@ substitute_grob_array (Grob_array *grob_arr, Grob_array *new_arr) *ptr++ = new_grob; } - new_grobs->set_size (ptr - array); + new_grobs->resize (ptr - array); if (new_arr == grob_arr) new_arr->set_array (*new_grobs); } @@ -225,7 +225,7 @@ spanner_system_range (Spanner *sp) { if (sp->broken_intos_.size ()) rv = Slice (sp->broken_intos_[0]->get_system ()->get_rank (), - sp->broken_intos_.top ()->get_system ()->get_rank ()); + sp->broken_intos_.back ()->get_system ()->get_rank ()); } return rv; } @@ -263,6 +263,8 @@ grob_system_range (Grob *g) struct Substitution_entry { Grob *grob_; + + /* Assumption: we have less than 32k paper columns. */ short left_; short right_; @@ -322,6 +324,8 @@ Spanner::fast_substitute_grob_array (SCM sym, /* We store items on the left, spanners on the right in this vector. + + FIXME: will not multithread. */ static Substitution_entry *vec; static int vec_room; @@ -337,7 +341,7 @@ Spanner::fast_substitute_grob_array (SCM sym, int spanner_index = len; int item_index = 0; - for (int i = 0; i < grob_array->size (); i++) + for (vsize i = 0; i < grob_array->size (); i++) { Grob *g = grob_array->grob (i); @@ -356,15 +360,15 @@ Spanner::fast_substitute_grob_array (SCM sym, qsort (vec, item_index, sizeof (Substitution_entry), &Substitution_entry::item_compare); - Array item_indices; - Array spanner_indices; + vector item_indices; + vector spanner_indices; for (int i = 0; i <= system_range.length (); i++) { - item_indices.push (Slice (len, 0)); - spanner_indices.push (Slice (len, 0)); + item_indices.push_back (Slice (len, 0)); + spanner_indices.push_back (Slice (len, 0)); } - Array *arrs[] + vector *arrs[] = { &item_indices, &spanner_indices }; @@ -380,14 +384,14 @@ Spanner::fast_substitute_grob_array (SCM sym, is a waste of time -- the staff-spanners screw up the ordering, since they go across the entire score. */ - for (int i = spanner_indices.size (); i--;) + for (vsize i = spanner_indices.size (); i--;) spanner_indices[i] = Slice (spanner_index, len - 1); assert (item_index <= spanner_index); - assert ((broken_intos_.size () == system_range.length () + 1) - || (broken_intos_.is_empty () && system_range.length () == 0)); - for (int i = 0; i < broken_intos_.size (); i++) + assert ((broken_intos_.size () == (vsize)system_range.length () + 1) + || (broken_intos_.empty () && system_range.length () == 0)); + for (vsize i = 0; i < broken_intos_.size (); i++) { Grob *sc = broken_intos_[i]; System *l = sc->get_system (); @@ -397,7 +401,7 @@ Spanner::fast_substitute_grob_array (SCM sym, if (!unsmob_grob_array (newval)) { newval = Grob_array::make_array (); - sc->internal_set_object (sym, newval); + sc->set_object (sym, newval); } Grob_array *new_array = unsmob_grob_array (newval); @@ -488,7 +492,7 @@ Spanner::substitute_one_mutable_property (SCM sym, fast_done = s->fast_substitute_grob_array (sym, grob_array); if (!fast_done) - for (int i = 0; i < s->broken_intos_.size (); i++) + for (vsize i = 0; i < s->broken_intos_.size (); i++) { Grob *sc = s->broken_intos_[i]; System *l = sc->get_system (); @@ -500,14 +504,14 @@ Spanner::substitute_one_mutable_property (SCM sym, if (!unsmob_grob_array (newval)) { newval = Grob_array::make_array (); - sc->internal_set_object (sym, newval); + sc->set_object (sym, newval); } substitute_grob_array (grob_array, unsmob_grob_array (newval)); } else { SCM newval = do_break_substitution (val); - sc->internal_set_object (sym, newval); + sc->set_object (sym, newval); } } }