]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix #230.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 10 Jan 2007 15:50:40 +0000 (16:50 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 10 Jan 2007 15:50:40 +0000 (16:50 +0100)
Don't do (index < array.size()-1). This is incorrect if size==0.

19 files changed:
lily/accidental-placement.cc
lily/axis-group-interface.cc
lily/beam-concave.cc
lily/beam.cc
lily/beaming-pattern.cc
lily/break-align-interface.cc
lily/constrained-breaking.cc
lily/melody-spanner.cc
lily/mensural-ligature-engraver.cc
lily/page-breaking.cc
lily/page-spacing.cc
lily/page-turn-engraver.cc
lily/page-turn-page-breaking.cc
lily/simple-spacer.cc
lily/spacing-determine-loose-columns.cc
lily/spacing-loose-columns.cc
lily/spacing-spanner.cc
lily/tie-formatting-problem.cc
lily/tuplet-engraver.cc

index c0616272067e2b841b24138b050d76515164e586..c55cb6fd9c3f42a85aceac578a1485ff42411e8d 100644 (file)
@@ -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;
 
index 186ed12388767cf60fc33a044e0b871bbf157b90..b2cf02a68c04fcf7e20fd94a98e2dbede02f578e 100644 (file)
@@ -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]]);
index 9965b4fd9e16a0cf7f8c648abea2461af925b19a..65644b7e564ed9c3a7cc8cf15cdd0dfc51be0509 100644 (file)
@@ -23,7 +23,7 @@ is_concave_single_notes (vector<int> 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<int> 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<int> 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<int> 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];
 
index 332e6b40551d3bf2449f756b04bab6266128c0f8..0630d0955fbd534fccbc5cbb6b7815b14a17f058 100644 (file)
@@ -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));
 
index 8966657e4813f37b1e55343cf9efcb64ef0fd29f..2c112c0a16f769060754bc1affa19ed57b8c4f8e 100644 (file)
@@ -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++;
 
index f78ea4ef480dd0ce8e0941add866e135a6fdbd09..78a1fb63c664c036d41a50d46395b5be2cb6defb 100644 (file)
@@ -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;
        }
 
index 40d4c1177f508e70c523e3fe92c72340024cc4db..d8cff5477d049205c88fb41caf1b3b9697430130 100644 (file)
@@ -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];
index d0544ab2d21e6a4d90a7af969c21df463306e9b4..5a217aa146b9e25903cb6e4996e5dc3b6c0d3ebb 100644 (file)
@@ -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;
index a6a48a8f188f4bf92537576453a9b90f6c9e8160..373fd460f4c76632f64a472efdb614acc89c22d1 100644 (file)
@@ -384,7 +384,7 @@ Mensural_ligature_engraver::fold_up_primitives (vector<Grob_info> 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
index b43c302367053bf5418ea7f77db00530f2cf2fcc..f018d7150f7f31d45ae8c5ae4661f264ed5d792d 100644 (file)
@@ -77,7 +77,7 @@ Page_breaking::break_into_pieces (vsize start_break, vsize end_break, Line_divis
   vector<Break_position> 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<Line_details> 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<Break_position> 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_)
index 945a52b60aeef2a8890007b6ebae9a115249ee01..8337c41d4cc4b10bf9f3b35252024bb43f69fc7a 100644 (file)
@@ -164,7 +164,7 @@ space_systems_on_2_pages (vector<Line_details> 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<Line_details> lines1 (lines.begin (), lines.begin () + i + 1);
@@ -195,7 +195,7 @@ space_systems_on_2_pages (vector<Line_details> 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<Line_details> 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);
index c2817479d3d9c586c6793cffdbb4364bb8ad079e..461ae1f0d8607e6faab8301bcd87b826126ec94c 100644 (file)
@@ -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])
            {
index c6a1381f3670280cc8349a48f1c521b53da37970..36ffb5b806870fcb41fe1a462973435a35d42b4a 100644 (file)
@@ -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<Break_node> 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);
     }
index 115c2a73376acb5cc5894173259c77e97405d407..57b89dc37c8f1128e5f2108d3f78e6077a5f896b 100644 (file)
@@ -432,7 +432,7 @@ get_line_forces (vector<Grob*> 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<Grob*> 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<Grob*> const &columns,
   Column_x_positions ret;
 
   ret.cols_.push_back (dynamic_cast<Item*> (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<Grob*> 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<Grob*> 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"))
index 60604388c31b47cdf501601233ff5de7ddee9b53..ea7dbb9dd9a9104607c5f98287b70829dad52f60 100644 (file)
@@ -202,7 +202,7 @@ Spacing_spanner::prune_loose_columns (Grob *me, vector<Grob*> *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<Grob*> 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);
index 4102ecdecc2009dfade508156a291c8b53b3cd94..9e0d49fd04e8e9985464c12c3338bcc98574a912 100644 (file)
@@ -100,7 +100,7 @@ set_loose_columns (System *which, Column_x_positions const *posns)
 
       vector<Real> 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];
 
index 4dd45bfd2465899dd7ffdb5a0fa65e5e362edc6c..871b080fa87b7246c8e556631776533f4aa18b98 100644 (file)
@@ -226,7 +226,7 @@ Spacing_spanner::generate_springs (Grob *me,
   for (vsize i = 0; i < cols.size (); i++)
     {
       Paper_column *col = dynamic_cast<Paper_column *> (cols[i]);
-      Paper_column *next = (i < cols.size()-1) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
+      Paper_column *next = (i + 1 < cols.size ()) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
       
       if (i > 0)
        generate_pair_spacing (me, prev, col, next, options);
index fa72e3f18a4aa7f2cbf7c643236eaa33e04f329f..40b7ba1d13e0847d6f1e4bee0666829f87c94ccc 100644 (file)
@@ -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_)
index 41b9aa894a2298eeb4b81841ee44dc92c97df15a..feb46f62b1eb157d0e8e7b313e633921db2cc3b2 100644 (file)
@@ -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_)