]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/constrained-breaking.hh
* scm/define-grobs.scm (all-grob-descriptions): make NonMusicalPaperColumn
[lilypond.git] / lily / include / constrained-breaking.hh
index ca662e854e6244d6e0ae18f7924ff5df73eed0e6..59f0a26a9d90314a88f29041037d27c3468b6e39 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2006 Joe Neeman <joeneeman@gmail.com>
 */
 
 #ifndef CONSTRAINED_BREAKING_HH
 
 #include "break-algorithm.hh"
 #include "lily-guile.hh"
+#include "matrix.hh"
 
 struct Line_details {
   Real force_;
-  Real extent_;   /* Y-extent of the system */
+  Interval extent_;   /* Y-extent of the system */
   Real padding_;  /* compulsory space after this system (if we're not last on a page) */
   Real bottom_padding_;
   Real space_;    /* spring length */
@@ -31,7 +32,6 @@ struct Line_details {
   Line_details ()
   {
     force_ = infinity_f;
-    extent_ = 0;
     padding_ = 0;
     bottom_padding_ = 0;
     space_ = 0;
@@ -81,7 +81,8 @@ public:
   Constrained_breaking ();
   Constrained_breaking (vector<vsize> const &start_col_posns);
 
-  vector<Column_x_positions> get_solution(vsize start, vsize end, vsize sys_count);
+  vector<Column_x_positions> get_solution (vsize start, vsize end, vsize sys_count);
+  vector<Column_x_positions> get_best_solution (vsize start, vsize end);
   vector<Line_details> get_details (vsize start, vsize end, vsize sys_count);
   int get_max_systems (vsize start, vsize end);
   int get_min_systems (vsize start, vsize end);
@@ -94,12 +95,11 @@ private:
 
   /* the (i,j)th entry is the configuration for breaking between
     columns i and j */
-  vector<Line_details> lines_;
-  vsize lines_rank_;
+  Matrix<Line_details> lines_;
 
   /* the [i](j,k)th entry is the score for fitting the first k bars onto the
     first j systems, starting at the i'th allowed starting column */
-  vector<vector<Constrained_break_node> > state_;
+  vector<Matrix<Constrained_break_node> > state_;
 
   vector<vsize> start_;         /* the columns at which we might be asked to start breaking */
   vector<vsize> starting_breakpoints_; /* the corresponding index in breaks_ */
@@ -108,7 +108,7 @@ private:
   vector<vsize> breaks_;
 
   Column_x_positions space_line (vsize start_col, vsize end_col);
-  void prepare_solution (vsize start, vsize end, vsize sys_count, vsize *rank, vsize *brk);
+  vsize prepare_solution (vsize start, vsize end, vsize sys_count);
 
   Real combine_demerits (Real force, Real prev_force);