X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsystem.cc;h=932e7ce8c631beec322bfd9ce069ac03f7032b51;hb=f1b93c0d52ef9229f8b58acc2ec8207ed50f5bee;hp=115ab8720c6f11e3460a44773a8260c0eb5ac7f9;hpb=fc9660e70c14140d16608855332f9b31697bc5ad;p=lilypond.git diff --git a/lily/system.cc b/lily/system.cc index 115ab8720c..932e7ce8c6 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -32,7 +32,7 @@ System::System (System const &src, int count) { all_elements_ = 0; rank_ = 0; - init_elements (); + init_elements (); } System::System (SCM s, Object_key const *key) @@ -40,7 +40,7 @@ System::System (SCM s, Object_key const *key) { all_elements_ = 0; rank_ = 0; - init_elements (); + init_elements (); } void @@ -51,7 +51,6 @@ System::init_elements () set_object ("all-elements", scm_arr); } - Grob * System::clone (int count) const { @@ -68,7 +67,7 @@ int System::spanner_count () const { int k = 0; - for (int i = all_elements_->size(); i--;) + for (int i = all_elements_->size (); i--;) if (dynamic_cast (all_elements_->grob (i))) k++; return k; @@ -83,7 +82,7 @@ System::typeset_grob (Grob *elem) { elem->pscore_ = pscore_; all_elements_->add (elem); - scm_gc_unprotect_object (elem->self_scm ()); + elem->unprotect (); } } @@ -97,25 +96,27 @@ System::derived_mark () const while (ptr < end) { scm_gc_mark ((*ptr)->self_scm ()); - ptr ++; + ptr++; } } + + if (pscore_) + scm_gc_mark (pscore_->self_scm ()); + Spanner::derived_mark (); } static void fixup_refpoints (Link_array const &grobs) { - for (int i = grobs.size (); i--; ) - { - grobs[i]->fixup_refpoint (); - } + for (int i = grobs.size (); i--;) + grobs[i]->fixup_refpoint (); } SCM System::get_paper_systems () { - for (int i = 0; i < all_elements_->size(); i++) + for (int i = 0; i < all_elements_->size (); i++) { Grob *g = all_elements_->grob (i); if (g->internal_has_interface (ly_symbol2scm ("only-prebreak-interface"))) @@ -142,14 +143,14 @@ System::get_paper_systems () for (int i = 0; i < broken_intos_.size (); i++) { Grob *se = broken_intos_[i]; - + extract_grob_set (se, "all-elements", all_elts); - for (int j = 0; j < all_elts.size(); j++) + for (int j = 0; j < all_elts.size (); j++) { Grob *g = all_elts[j]; g->fixup_refpoint (); } - + count += all_elts.size (); } @@ -157,13 +158,13 @@ System::get_paper_systems () needed for doing items. */ fixup_refpoints (all_elements_->array ()); - - for (int i = 0 ; i < all_elements_->size(); i++) + + for (int i = 0; i < all_elements_->size (); i++) all_elements_->grob (i)->handle_broken_dependencies (); handle_broken_dependencies (); - -#if 0 /* don't do this: strange side effects. */ + +#if 0 /* FIXME: strange side effects. */ /* Because the this->get_property (all-elements) contains items in 3 versions, handle_broken_dependencies () will leave duplicated @@ -190,7 +191,7 @@ System::get_paper_systems () System *system = dynamic_cast (broken_intos_[i]); system->post_processing (); - scm_vector_set_x (lines, scm_int2num (i), system->get_paper_system ()); + scm_vector_set_x (lines, scm_from_int (i), system->get_paper_system ()); if (be_verbose_global) progress_indication (to_string (i) + "]"); @@ -234,10 +235,10 @@ System::add_column (Paper_column *p) } p->rank_ - = ga->size() + = ga->size () ? Paper_column::get_rank (ga->array ().top ()) + 1 : 0; - + ga->add (p); Axis_group_interface::add_element (this, p); } @@ -260,9 +261,8 @@ apply_tweaks (Grob *g, bool broken) void System::pre_processing () { - for (int i = 0 ; i < all_elements_->size(); i ++) + for (int i = 0; i < all_elements_->size (); i++) all_elements_->grob (i)->discretionary_processing (); - if (be_verbose_global) message (_f ("Grob count %d", element_count ())); @@ -272,22 +272,22 @@ System::pre_processing () array, and should be processed before the original is potentially killed. */ - for (int i = all_elements_->size(); i --; ) + for (int i = all_elements_->size (); i--;) all_elements_->grob (i)->handle_prebroken_dependencies (); fixup_refpoints (all_elements_->array ()); - for (int i = 0 ; i < all_elements_->size(); i ++) + for (int i = 0; i < all_elements_->size (); i++) apply_tweaks (all_elements_->grob (i), false); - for (int i = 0 ; i < all_elements_->size(); i ++) + for (int i = 0; i < all_elements_->size (); i++) all_elements_->grob (i)->calculate_dependencies (PRECALCED, PRECALCING, ly_symbol2scm ("before-line-breaking-callback")); message (_ ("Calculating line breaks...")); progress_indication (" "); - - for (int i = 0 ; i < all_elements_->size(); i ++) + + for (int i = 0; i < all_elements_->size (); i++) { Grob *e = all_elements_->grob (i); SCM proc = e->get_property ("spacing-procedure"); @@ -299,7 +299,7 @@ System::pre_processing () void System::post_processing () { - for (int i = 0 ; i < all_elements_->size(); i ++) + for (int i = 0; i < all_elements_->size (); i++) { Grob *g = all_elements_->grob (i); @@ -310,9 +310,7 @@ System::post_processing () Interval iv (extent (this, Y_AXIS)); if (iv.is_empty ()) - { - programming_error ("system with empty extent"); - } + programming_error ("system with empty extent"); else translate_axis (-iv[MAX], Y_AXIS); @@ -320,7 +318,6 @@ System::post_processing () This might seem inefficient, but Stencils are cached per grob anyway. */ - Link_array all_elts_sorted (all_elements_->array ()); all_elts_sorted.default_sort (); all_elts_sorted.uniq (); @@ -342,7 +339,7 @@ System::get_paper_system () /* Output stencils in three layers: 0, 1, 2. Default layer: 1. */ for (int i = 0; i < LAYER_COUNT; i++) - for (int j = all_elements_->size (); j --;) + for (int j = all_elements_->size (); j--;) { Grob *g = all_elements_->grob (j); Stencil *stil = g->get_stencil (); @@ -381,7 +378,7 @@ System::get_paper_system () Interval staff_refpoints; staff_refpoints.set_empty (); extract_grob_set (this, "spaceable-staves", staves); - for (int i = staves.size (); i--; ) + for (int i = staves.size (); i--;) { Grob *g = staves[i]; staff_refpoints.add_point (g->relative_coordinate (this, Y_AXIS)); @@ -393,7 +390,7 @@ System::get_paper_system () pl->break_before_penalty_ = robust_scm2double (break_point->get_property ("page-penalty"), 0.0); - return scm_gc_unprotect_object (pl->self_scm ()); + return pl->unprotect (); } Link_array @@ -406,20 +403,20 @@ System::broken_col_range (Item const *left, Item const *right) const extract_grob_set (this, "columns", cols); int i = 0; - while (i < cols.size() + while (i < cols.size () && cols[i] != left) i++; - if (i < cols.size()) - i ++; - - while (i < cols.size() + if (i < cols.size ()) + i++; + + while (i < cols.size () && cols[i] != right) { Paper_column *c = dynamic_cast (cols[i]); if (Item::is_breakable (c) && !c->system_) ret.push (c); - i++; + i++; } return ret; @@ -434,7 +431,7 @@ System::columns () const int last_breakable = ro_columns.size (); - while (last_breakable --) + while (last_breakable--) { if (Item::is_breakable (ro_columns [last_breakable])) break;