From 73e00ee8b63fffb7ecde6ce57af7e77d6f643794 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 10 Jan 2007 16:50:40 +0100 Subject: [PATCH] Fix #230. Don't do (index < array.size()-1). This is incorrect if size==0. --- lily/accidental-placement.cc | 2 +- lily/axis-group-interface.cc | 2 +- lily/beam-concave.cc | 8 ++++---- lily/beam.cc | 4 ++-- lily/beaming-pattern.cc | 4 ++-- lily/break-align-interface.cc | 2 +- lily/constrained-breaking.cc | 4 ++-- lily/melody-spanner.cc | 2 +- lily/mensural-ligature-engraver.cc | 2 +- lily/page-breaking.cc | 6 +++--- lily/page-spacing.cc | 6 +++--- lily/page-turn-engraver.cc | 2 +- lily/page-turn-page-breaking.cc | 4 ++-- lily/simple-spacer.cc | 10 +++++----- lily/spacing-determine-loose-columns.cc | 4 ++-- lily/spacing-loose-columns.cc | 2 +- lily/spacing-spanner.cc | 2 +- lily/tie-formatting-problem.cc | 2 +- lily/tuplet-engraver.cc | 2 +- 19 files changed, 35 insertions(+), 35 deletions(-) diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index c061627206..c55cb6fd9c 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -391,7 +391,7 @@ Accidental_placement::calc_positioning_done (SCM smob) Real offset = -skyline_meshing_distance (apes[i]->right_skyline_, left_skyline); if (isinf (offset)) - offset = (i < apes.size () - 1) ? apes[i + 1]->offset_ : 0.0; + offset = (i + 1 < apes.size ()) ? apes[i + 1]->offset_ : 0.0; else offset -= padding; diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 186ed12388..b2cf02a68c 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -99,7 +99,7 @@ Axis_group_interface::cached_pure_height (Grob *me, if (!scm_is_vector (extents)) { extents = scm_c_make_vector (breaks.size () - 1, SCM_EOL); - for (vsize i = 0; i < breaks.size () - 1; i++) + for (vsize i = 0; i + 1 < breaks.size (); i++) { int st = Paper_column::get_rank (cols[breaks[i]]); int ed = Paper_column::get_rank (cols[breaks[i+1]]); diff --git a/lily/beam-concave.cc b/lily/beam-concave.cc index 9965b4fd9e..65644b7e56 100644 --- a/lily/beam-concave.cc +++ b/lily/beam-concave.cc @@ -23,7 +23,7 @@ is_concave_single_notes (vector const &positions, Direction beam_dir) /* notes above and below the interval covered by 1st and last note. */ - for (vsize i = 1; i < positions.size () - 1; i++) + for (vsize i = 1; i + 1 < positions.size (); i++) { above = above || (positions[i] > covering[UP]); below = below || (positions[i] < covering[DOWN]); @@ -36,7 +36,7 @@ is_concave_single_notes (vector const &positions, Direction beam_dir) */ int dy = positions.back () - positions[0]; int closest = max (beam_dir * positions.back (), beam_dir * positions[0]); - for (vsize i = 2; !concave && i < positions.size () - 1; i++) + for (vsize i = 2; !concave && i + 1 < positions.size (); i++) { int inner_dy = positions[i] - positions[i - 1]; if (sign (inner_dy) != sign (dy) @@ -46,7 +46,7 @@ is_concave_single_notes (vector const &positions, Direction beam_dir) } bool all_closer = true; - for (vsize i = 1; all_closer && i < positions.size () - 1; i++) + for (vsize i = 1; all_closer && i + 1 < positions.size (); i++) { all_closer = all_closer && (beam_dir * positions[i] > closest); @@ -62,7 +62,7 @@ calc_positions_concaveness (vector const &positions, Direction beam_dir) Real dy = positions.back () - positions[0]; Real slope = dy / Real (positions.size () - 1); Real concaveness = 0.0; - for (vsize i = 1; i < positions.size () - 1; i++) + for (vsize i = 1; i + 1 < positions.size (); i++) { Real line_y = slope * i + positions[0]; diff --git a/lily/beam.cc b/lily/beam.cc index 332e6b4055..0630d0955f 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -386,7 +386,7 @@ Beam::get_beam_segments (Grob *me_grob, Grob **common) bool inside_stem = (event_dir == LEFT) ? segs[j].stem_index_ > 0 - : segs[j].stem_index_ < stems.size () - 1; + : segs[j].stem_index_ + 1 < stems.size () ; bool event = on_bound || abs (segs[j].rank_ - segs[j+event_dir].rank_) > 1 @@ -1222,7 +1222,7 @@ Beam::set_beaming (Grob *me, Beaming_pattern const *beaming) { int count = beaming->beamlet_count (i, d); if (i > 0 - && i < stems.size () -1 + && i + 1 < stems.size () && Stem::is_invisible (stem)) count = min (count, beaming->beamlet_count (i,-d)); diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index 8966657e48..2c112c0a16 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -160,13 +160,13 @@ Beaming_pattern::beamify (Context *context) vsize k = 0; for (vsize i = 0; i < infos_.size(); i++) { - while (j < group_starts.size() - 1 + while (j + 1 < group_starts.size() && group_starts[j+1] <= infos_[i].start_moment_) j++; infos_[i].group_start_ = group_starts[j]; infos_[i].beat_length_ = beat_length; - while (k < beat_starts.size() - 1 + while (k + 1 < beat_starts.size() && beat_starts[k+1] <= infos_[i].start_moment_) k++; diff --git a/lily/break-align-interface.cc b/lily/break-align-interface.cc index f78ea4ef48..78a1fb63c6 100644 --- a/lily/break-align-interface.cc +++ b/lily/break-align-interface.cc @@ -233,7 +233,7 @@ Break_align_interface::calc_positioning_done (SCM smob) else { extra_right_space = distance; - if (idx < offsets.size() - 1) + if (idx + 1 < offsets.size()t) offsets[idx+1] = extents[idx][RIGHT] + distance; } diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc index 40d4c1177f..d8cff5477d 100644 --- a/lily/constrained-breaking.cc +++ b/lily/constrained-breaking.cc @@ -335,7 +335,7 @@ Constrained_breaking::initialize () other_lines.length (), other_lines.length () - first_line.length (), ragged_right_); - for (vsize i = 0; i < breaks_.size () - 1; i++) + for (vsize i = 0; i + 1 < breaks_.size (); i++) { Real max_ext = 0; for (vsize j = i + 1; j < breaks_.size (); j++) @@ -373,7 +373,7 @@ Constrained_breaking::initialize () for (vsize i = 0; i < start_.size (); i++) { vsize j; - for (j = 0; j < breaks_.size () - 1 && breaks_[j] < start_[i]; j++) + for (j = 0; j + 1 < breaks_.size () && breaks_[j] < start_[i]; j++) ; starting_breakpoints_.push_back (j); start_[i] = breaks_[j]; diff --git a/lily/melody-spanner.cc b/lily/melody-spanner.cc index d0544ab2d2..5a217aa146 100644 --- a/lily/melody-spanner.cc +++ b/lily/melody-spanner.cc @@ -41,7 +41,7 @@ Melody_spanner::calc_neutral_stem_direction (SCM smob) && !dirs[next_nonneutral]) next_nonneutral++; - while (last_nonneutral == VPOS || last_nonneutral < dirs.size () - 1) + while (last_nonneutral == VPOS || last_nonneutral + 1 < dirs.size ()) { Direction d1 = CENTER; Direction d2 = CENTER; diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc index a6a48a8f18..373fd460f4 100644 --- a/lily/mensural-ligature-engraver.cc +++ b/lily/mensural-ligature-engraver.cc @@ -384,7 +384,7 @@ Mensural_ligature_engraver::fold_up_primitives (vector primitives) if (Rhythmic_head::dot_count (current) > 0) // Move dots above/behind the ligature. { - if (i < primitives.size () - 1) + if (i + 1 < primitives.size ()) // dot in the midst => move above head { // FIXME: Amount of vertical dot-shift should depend on diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index b43c302367..f018d7150f 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -77,7 +77,7 @@ Page_breaking::break_into_pieces (vsize start_break, vsize end_break, Line_divis vector chunks = chunk_list (start_break, end_break); assert (chunks.size () == div.size () + 1); - for (vsize i = 0; i < chunks.size () - 1; i++) + for (vsize i = 0; i + 1 < chunks.size (); i++) { vsize sys = next_system (chunks[i]); if (all_[sys].pscore_) @@ -120,7 +120,7 @@ Page_breaking::line_details (vsize start_break, vsize end_break, Line_division c vector ret; assert (chunks.size () == div.size () + 1); - for (vsize i = 0; i < chunks.size () - 1; i++) + for (vsize i = 0; i + 1 < chunks.size (); i++) { vsize sys = next_system (chunks[i]); if (all_[sys].pscore_) @@ -341,7 +341,7 @@ Page_breaking::system_count_bounds (vector const &chunks, bool m Line_division ret; ret.resize (chunks.size () - 1, 1); - for (vsize i = 0; i < chunks.size () - 1; i++) + for (vsize i = 0; i + 1 < chunks.size (); i++) { vsize sys = next_system (chunks[i]); if (all_[sys].pscore_) diff --git a/lily/page-spacing.cc b/lily/page-spacing.cc index 945a52b60a..8337c41d4c 100644 --- a/lily/page-spacing.cc +++ b/lily/page-spacing.cc @@ -164,7 +164,7 @@ space_systems_on_2_pages (vector const &lines, bool ragged_last) { /* if there is a forced break, this reduces to 2 1-page problems */ - for (vsize i = 0; i < lines.size () - 1; i++) + for (vsize i = 0; i + 1 < lines.size (); i++) if (lines[i].page_permission_ == ly_symbol2scm ("force")) { vector lines1 (lines.begin (), lines.begin () + i + 1); @@ -195,7 +195,7 @@ space_systems_on_2_pages (vector const &lines, if (ragged || ragged_last) page2_force[page2_force.size () - 1 - i] = - (page2.force_ < 0 && i < page1_force.size () - 1) ? infinity_f : 0; + (page2.force_ < 0 && i + 1 < page1_force.size ()) ? infinity_f : 0; else page2_force[page2_force.size () - 1 - i] = page2.force_; } @@ -358,7 +358,7 @@ min_page_count (vector const &uncompressed_lines, + ((cur_rod_height > 0) ? lines[i].padding_: 0); if ((next_height > page_height && cur_rod_height > 0) - || (i < lines.size () - 1 && lines[i].page_permission_ == ly_symbol2scm ("force"))) + || (i + 1 < lines.size () && lines[i].page_permission_ == ly_symbol2scm ("force"))) { ret++; cur_rod_height = ext_len + (rag ? lines[i].space_ : 0); diff --git a/lily/page-turn-engraver.cc b/lily/page-turn-engraver.cc index c2817479d3..461ae1f0d8 100644 --- a/lily/page-turn-engraver.cc +++ b/lily/page-turn-engraver.cc @@ -288,7 +288,7 @@ Page_turn_engraver::finalize () /* it's possible that the last of my newly-split events overlaps the next repeat_penalty, in which case we need to refilter that event */ - if (rep_index < repeat_penalties_.size () - 1 + if (rep_index + 1 < repeat_penalties_.size () && split.size () && split.back ().duration_[RIGHT] > repeat_penalties_[rep_index+1].duration_[LEFT]) { diff --git a/lily/page-turn-page-breaking.cc b/lily/page-turn-page-breaking.cc index c6a1381f36..36ffb5b806 100644 --- a/lily/page-turn-page-breaking.cc +++ b/lily/page-turn-page-breaking.cc @@ -217,7 +217,7 @@ Page_turn_page_breaking::solve () state_.clear (); message (_f ("Calculating page and line breaks (%d possible page breaks)...", (int)breaks_.size () - 1) + " "); - for (vsize i = 0; i < breaks_.size () - 1; i++) + for (vsize i = 0; i + 1 < breaks_.size (); i++) { calc_subproblem (i); progress_indication (string ("[") + to_string (i + 1) + "]"); @@ -263,7 +263,7 @@ Page_turn_page_breaking::make_pages (vector const &soln, SCM systems for (vsize j = 0; j < soln[i].page_count_; j++) lines_per_page.push_back (soln[i].system_count_[j]); - if (i < soln.size () - 1 && (soln[i].first_page_number_ + soln[i].page_count_) % 2) + if (i + 1 < soln.size () && (soln[i].first_page_number_ + soln[i].page_count_) % 2) /* add a blank page */ lines_per_page.push_back (0); } diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 115c2a7337..57b89dc37c 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -432,7 +432,7 @@ get_line_forces (vector const &columns, breaks.clear (); breaks.push_back (0); cols.push_back (Column_description ()); - for (vsize i = 1; i < non_loose.size () - 1; i++) + for (vsize i = 1; i + 1 < non_loose.size (); i++) { if (Paper_column::is_breakable (non_loose[i])) breaks.push_back (cols.size ()); @@ -442,7 +442,7 @@ get_line_forces (vector const &columns, breaks.push_back (cols.size ()); force.resize (breaks.size () * breaks.size (), infinity_f); - for (vsize b = 0; b < breaks.size () - 1; b++) + for (vsize b = 0; b + 1 < breaks.size (); b++) { cols[breaks[b]] = get_column_description (non_loose, breaks[b], true); vsize st = breaks[b]; @@ -507,7 +507,7 @@ get_line_configuration (vector const &columns, Column_x_positions ret; ret.cols_.push_back (dynamic_cast (columns[0])->find_prebroken_piece (RIGHT)); - for (vsize i = 1; i < columns.size () - 1; i++) + for (vsize i = 1; i + 1 < columns.size (); i++) { if (is_loose (columns[i])) ret.loose_cols_.push_back (columns[i]); @@ -518,7 +518,7 @@ get_line_configuration (vector const &columns, /* since we've already put our line-ending column in the column list, we can ignore the end_XXX_ fields of our column_description */ - for (vsize i = 0; i < ret.cols_.size () - 1; i++) + for (vsize i = 0; i + 1 < ret.cols_.size (); i++) { cols.push_back (get_column_description (ret.cols_, i, i == 0)); spacer.add_spring (cols[i].ideal_, cols[i].inverse_hooke_); @@ -551,7 +551,7 @@ get_line_configuration (vector const &columns, /* Check if breaking constraints are met. */ - for (vsize i = 1; i < ret.cols_.size () - 1; i++) + for (vsize i = 1; i + 1 < ret.cols_.size (); i++) { SCM p = ret.cols_[i]->get_property ("line-break-permission"); if (p == ly_symbol2scm ("force")) diff --git a/lily/spacing-determine-loose-columns.cc b/lily/spacing-determine-loose-columns.cc index 60604388c3..ea7dbb9dd9 100644 --- a/lily/spacing-determine-loose-columns.cc +++ b/lily/spacing-determine-loose-columns.cc @@ -202,7 +202,7 @@ Spacing_spanner::prune_loose_columns (Grob *me, vector *cols, { Grob *c = cols->at (i); - bool loose = (i > 0 && i < cols->size () - 1) + bool loose = (i > 0 && i + 1 < cols->size ()) && is_loose_column (cols->at (i - 1), c, cols->at (i + 1), options); if (loose) @@ -355,7 +355,7 @@ Spacing_spanner::set_implicit_neighbor_columns (vector const &cols) cols[i]->set_object ("left-neighbors", ga_scm); } extract_grob_set (cols[i], "right-neighbors", rns); - if (rns.empty () && i < cols.size () - 1) + if (rns.empty () && i + 1 < cols.size ()) { SCM ga_scm = Grob_array::make_array (); Grob_array *ga = unsmob_grob_array (ga_scm); diff --git a/lily/spacing-loose-columns.cc b/lily/spacing-loose-columns.cc index 4102ecdecc..9e0d49fd04 100644 --- a/lily/spacing-loose-columns.cc +++ b/lily/spacing-loose-columns.cc @@ -100,7 +100,7 @@ set_loose_columns (System *which, Column_x_positions const *posns) vector clique_spacing; clique_spacing.push_back (0.0); - for (vsize j = 1; j < clique.size () - 1; j ++) + for (vsize j = 1; j + 1 < clique.size (); j ++) { Grob *clique_col = clique[j]; diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 4dd45bfd24..871b080fa8 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -226,7 +226,7 @@ Spacing_spanner::generate_springs (Grob *me, for (vsize i = 0; i < cols.size (); i++) { Paper_column *col = dynamic_cast (cols[i]); - Paper_column *next = (i < cols.size()-1) ? dynamic_cast (cols[i+1]) : 0; + Paper_column *next = (i + 1 < cols.size ()) ? dynamic_cast (cols[i+1]) : 0; if (i > 0) generate_pair_spacing (me, prev, col, next, options); diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index fa72e3f18a..40b7ba1d13 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -974,7 +974,7 @@ Tie_formatting_problem::set_ties_config_standard_directions (Ties_configuration } } - for (vsize i = 1; i < tie_configs->size() - 1; i++) + for (vsize i = 1; i + 1 < tie_configs->size (); i++) { Tie_configuration &conf = tie_configs->at (i); if (conf.dir_) diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index 41b9aa894a..feb46f62b1 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -171,7 +171,7 @@ Tuplet_engraver::process_music () tuplets_[i].stop_moment_.grace_part_ = 0; - if (i < tuplets_.size () - 1 && tuplets_[i + 1].bracket_) + if (i + 1 < tuplets_.size () && tuplets_[i + 1].bracket_) Tuplet_bracket::add_tuplet_bracket (tuplets_[i].bracket_, tuplets_[i + 1].bracket_); if (i > 0 && tuplets_[i - 1].bracket_) -- 2.39.2