X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbeaming-info.cc;h=417a20372c193de23bda8312f61b27930d7f9a94;hb=2efb2a313d08dd7d6490450e1591ba7feff12581;hp=d66a452814a29523a866835aca1fef38a7d645ef;hpb=7aabfb20c46e0a1de41698ddc6859ccd3a6dea85;p=lilypond.git diff --git a/lily/beaming-info.cc b/lily/beaming-info.cc index d66a452814..417a20372c 100644 --- a/lily/beaming-info.cc +++ b/lily/beaming-info.cc @@ -1,105 +1,123 @@ -/* - beaming-info.cc -- implement Beaming_info, Beaming_info_list - +/* + beaming-info.cc -- implement Beaming_info, Beaming_info_list + source file of the GNU LilyPond music typesetter - - (c) 1999--2003 Han-Wen Nienhuys - - */ + + (c) 1999--2006 Han-Wen Nienhuys +*/ #include "beaming.hh" Beaming_info::Beaming_info () { - start_mom_ = 0; - beams_i_drul_[LEFT] = 0; - beams_i_drul_[RIGHT] = 0; + start_moment_ = 0; + beam_count_drul_[LEFT] = 0; + beam_count_drul_[RIGHT] = 0; } Beaming_info::Beaming_info (Moment m, int i) { - start_mom_ = m; - beams_i_drul_[LEFT] = i; - beams_i_drul_[RIGHT] = i; + start_moment_ = m; + beam_count_drul_[LEFT] = i; + beam_count_drul_[RIGHT] = i; } -const int infinity_i = INT_MAX; // guh. -const int at_beat = 1<<15; +const int at_beat = 1 << 15; // WTF is this. int -Beaming_info_list::best_splitpoint_index (Moment &beat_length,bool subdivide) const +Beaming_info_list::best_splitpoint_index (Moment &beat_length, + bool subdivide) const { - int minden = infinity_i; - int minidx = -1; + int min_denominator = INT_MAX; + int min_index = -1; Moment beat_pos; - for (int i=1; i < infos_.size (); i++) + for (vsize i = 1; i < infos_.size (); i++) { - beat_pos = infos_[i].start_mom_ / beat_length; + beat_pos = infos_[i].start_moment_ / beat_length; int den = beat_pos.den (); - if (infos_[i].beams_i_drul_[LEFT] == infos_[i-1].beams_i_drul_[RIGHT] && !subdivide) + if (infos_[i].beam_count_drul_[LEFT] == infos_[i - 1].beam_count_drul_[RIGHT] + && !subdivide) den *= 2; - if (den < minden) + + if (den < min_denominator) { - minidx = i; - minden = den; + min_index = i; + min_denominator = den; } } - return minidx|(minden==1 && subdivide ? at_beat : 0); + return min_index | (min_denominator == 1 && subdivide ? at_beat : 0); } int Beaming_info_list::beam_extend_count (Direction d) const { if (infos_.size () == 1) - return infos_[0].beams_i_drul_[d]; + return infos_[0].beam_count_drul_[d]; - Beaming_info thisbeam = infos_.boundary (d, 0); - Beaming_info next = infos_.boundary (d, 1); - - return thisbeam.beams_i_drul_[-d] splits; - int m = best_splitpoint_index (beat_length,subdivide); - bool split = subdivide && (m & at_beat); m = m & ~at_beat; - splits[LEFT].infos_ = infos_.slice (0,m); - splits[RIGHT].infos_ = infos_.slice (m, infos_.size ()); + + int m = best_splitpoint_index (beat_length, subdivide); + bool split = subdivide && (m & at_beat); + m = m & ~at_beat; + + splits[LEFT].infos_ = vector (infos_.begin (), + infos_.begin () + m); + splits[RIGHT].infos_ = vector (infos_.begin () + m, + infos_.end ()); Direction d = LEFT; - + do { - splits[d].beamify (beat_length,subdivide); + splits[d].beamify (beat_length, subdivide); } while (flip (&d) != LEFT); - int middle_beams = (split ? 1 : - splits[RIGHT].beam_extend_count (LEFT)