From cebaf93a028d6ca2e8e55c755f01a1d80c5b954c Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:52:41 +0000 Subject: [PATCH] lilypond-0.1.1 --- lily/break.cc | 129 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 92 insertions(+), 37 deletions(-) diff --git a/lily/break.cc b/lily/break.cc index 8d3779e4da..1ef5c4bc6f 100644 --- a/lily/break.cc +++ b/lily/break.cc @@ -15,26 +15,89 @@ #include "p-score.hh" #include "p-col.hh" +String +Col_stats::str() const { + String s(count_i_); + s += " lines"; + if (count_i_) + s += String(Real(cols_i_)/count_i_, ", (with an average of %.1f columns)"); + + return s; +} + +void +Col_stats::add(Line_of_cols const& line) +{ + count_i_++; + cols_i_ += line.size(); +} + + +Col_stats::Col_stats() +{ + count_i_ =0; + cols_i_ =0; +} + +/* **************************************************************** */ + +Line_of_cols +Break_algorithm::all_cols()const +{ + Line_of_cols retval; + for (PCursor c(pscore_l_->col_p_list_.top()); + c.ok(); c++) { + + retval.push(c); + } + return retval; +} + +Array +Break_algorithm::find_break_indices() const +{ + Line_of_cols all(all_cols()); + Array retval; + + for (int i=0; i < all.size(); i++) + if (all[i]->breakable_b()) + retval.push(i); + + if ( linelength <=0) + while ( retval.size() >2) + retval.del(1); + + return retval; +} + /// return all breakable columns Line_of_cols Break_algorithm::find_breaks() const { + Line_of_cols all(all_cols()); Line_of_cols retval; - for (iter_top(pscore_l_->col_p_list_,c); c.ok(); c++) { - if (c->breakable_b()) - retval.push(c); - } + + for (int i=0; i < all.size(); i++) + if (all[i]->breakable_b()) + retval.push(all[i]); + + if ( linelength <=0) while ( retval.size() >2) retval.del(1); return retval; } + + + + Line_spacer* Break_algorithm::generate_spacing_problem(Line_of_cols curline)const { Line_spacer * sp= (*get_line_spacer)(); + sp->paper_l_ = pscore_l_->paper_l_; sp->add_column(curline[0], true, 0.0); for (int i=1; i< curline.size()-1; i++) @@ -44,46 +107,24 @@ Break_algorithm::generate_spacing_problem(Line_of_cols curline)const sp->add_column(curline.top(), true, linelength); else sp->add_column(curline.top()); - return sp; -} -Col_hpositions -Break_algorithm::stupid_solution(Line_of_cols curline)const -{ - Line_spacer *sp =generate_spacing_problem(curline); - Col_hpositions colhpos; - colhpos.cols = curline; - colhpos.energy = INFTY_f; - colhpos.ugh_b_ = true; - colhpos.config = sp->default_solution(); - delete sp; - return colhpos; + sp->prepare(); + return sp; } -/// construct an appropriate Spacing_problem and solve it. -Col_hpositions -Break_algorithm::solve_line(Line_of_cols curline) const +Break_algorithm::Break_algorithm() { - Line_spacer *sp = generate_spacing_problem(curline); - sp->prepare(); - - Array the_sol=sp->solve(); - Col_hpositions col_hpos; - col_hpos.cols = curline; - col_hpos.energy = the_sol.pop(); - col_hpos.config = the_sol; - col_hpos.error_col_l_arr_ = sp->error_pcol_l_arr(); - col_hpos.OK(); - delete sp; - - return col_hpos; + pscore_l_ = 0; + get_line_spacer =0; + linelength = 0; } -Break_algorithm::Break_algorithm(PScore&s) +void +Break_algorithm::set_pscore(PScore*s) { - pscore_l_ = &s; - get_line_spacer =0; - linelength = s.paper_l_->linewidth_f(); + pscore_l_ = s; + linelength = s->paper_l_->linewidth_f(); + do_set_pscore(); } bool @@ -124,3 +165,17 @@ Break_algorithm::solve()const return do_solve(); } +void +Break_algorithm::do_set_pscore() +{ + +} + +void +Break_algorithm::print_stats()const +{ + if (approx_stats_.count_i_) + *mlog << "\nApproximated: " << approx_stats_.str() << "\n"; + if (exact_stats_.count_i_) + *mlog << "Calculated exactly: " << exact_stats_.str() << "\n"; +} -- 2.39.5