X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fconstrained-breaking.hh;h=8f2a4de2effeea35c0e0fc030069d39d01e5cecf;hb=9f3572d98bb948c9689cd1f75401a029451fa001;hp=56c673705de4e6e79b049e45d9af149db767d9f5;hpb=04265f11d1f21416ccebd2dcaa1d903dc781b36e;p=lilypond.git diff --git a/lily/include/constrained-breaking.hh b/lily/include/constrained-breaking.hh index 56c673705d..8f2a4de2ef 100644 --- a/lily/include/constrained-breaking.hh +++ b/lily/include/constrained-breaking.hh @@ -4,22 +4,20 @@ source file of the GNU LilyPond music typesetter - (c) 2006 Joe Neeman + (c) 2006 Han-Wen Nienhuys */ #ifndef CONSTRAINED_BREAKING_HH #define CONSTRAINED_BREAKING_HH +#include "break-algorithm.hh" #include "lily-guile.hh" -#include "matrix.hh" -#include "prob.hh" struct Line_details { Real force_; - Interval extent_; /* Y-extent of the system */ + Real 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 */ + Real space_; /* spring length (stretches over extent_ but not over padding_) */ Real inverse_hooke_; SCM break_permission_; @@ -32,8 +30,8 @@ struct Line_details { Line_details () { force_ = infinity_f; + extent_ = 0; padding_ = 0; - bottom_padding_ = 0; space_ = 0; inverse_hooke_ = 1; break_permission_ = ly_symbol2scm ("allow"); @@ -43,21 +41,6 @@ struct Line_details { page_penalty_ = 0; turn_penalty_ = 0; } - - Line_details (Prob *pb) - { - force_ = 0; - extent_ = unsmob_stencil (pb->get_property ("stencil")) ->extent (Y_AXIS); - padding_ = 0; - space_ = 1.0; - inverse_hooke_ = 1.0; - break_permission_ = ly_symbol2scm ("allow"); - page_permission_ = pb->get_property ("page-break-permission"); - turn_permission_ = pb->get_property ("page-turn-permission"); - break_penalty_ = 0; - page_penalty_ = robust_scm2double (pb->get_property ("page-break-penalty"), 0); - turn_penalty_ = robust_scm2double (pb->get_property ("page-turn-penalty"), 0); - } }; /* @@ -89,15 +72,14 @@ struct Constrained_break_node /* A dynamic programming solution to breaking scores into lines */ -class Constrained_breaking +class Constrained_breaking : public Break_algorithm { public: vector solve (); - Constrained_breaking (Paper_score *ps); - Constrained_breaking (Paper_score *ps, vector const &start_col_posns); + Constrained_breaking (); + Constrained_breaking (vector const &start_col_posns); - vector get_solution (vsize start, vsize end, vsize sys_count); - vector get_best_solution (vsize start, vsize end); + vector get_solution(vsize start, vsize end, vsize sys_count); vector 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); @@ -105,19 +87,17 @@ public: void resize (vsize systems); private: - Paper_score *pscore_; vsize valid_systems_; vsize systems_; - bool ragged_right_; - bool ragged_last_; /* the (i,j)th entry is the configuration for breaking between columns i and j */ - Matrix lines_; + vector lines_; + vsize lines_rank_; /* 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 > state_; + vector > state_; vector start_; /* the columns at which we might be asked to start breaking */ vector starting_breakpoints_; /* the corresponding index in breaks_ */ @@ -125,10 +105,8 @@ private: vector all_; vector breaks_; - void initialize (); - Column_x_positions space_line (vsize start_col, vsize end_col); - vsize prepare_solution (vsize start, vsize end, vsize sys_count); + void prepare_solution (vsize start, vsize end, vsize sys_count, vsize *rank, vsize *brk); Real combine_demerits (Real force, Real prev_force);