]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/system.cc
(get_header): copy module, instead of
[lilypond.git] / lily / system.cc
index 115ab8720c6f11e3460a44773a8260c0eb5ac7f9..932e7ce8c631beec322bfd9ce069ac03f7032b51 100644 (file)
@@ -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<Spanner *> (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<Grob> 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<System *> (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<Grob> 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<Item>
@@ -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<Paper_column *> (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;