]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix #230
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 10 Jan 2007 15:47:52 +0000 (16:47 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 10 Jan 2007 15:47:52 +0000 (16:47 +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-alignment-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 d60cdcbd071814bd03fe520221e520999aefad53..323fa7d6f3d23764d361df92707fbe7f97772eee 100644 (file)
@@ -406,7 +406,7 @@ Accidental_placement::calc_positioning_done (SCM smob)
     {
       Real offset = -apes[i]->right_skyline_.distance (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 e057bddb097c27e172d0fb8b05e7d8f28f5110ef..e6b1e10f2cac60a9f502a254436ae03fc9fe5f5a 100644 (file)
@@ -109,7 +109,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]]);
@@ -466,7 +466,7 @@ Axis_group_interface::skyline_spacing (Grob *me, vector<Grob*> elements)
       SCM priority = elements[i]->get_property ("outside-staff-priority");
       vector<Grob*> current_elts;
       current_elts.push_back (elements[i]);
-      while (i < elements.size () - 1
+      while (i + 1 < elements.size () 
             && scm_eq_p (elements[i+1]->get_property ("outside-staff-priority"), priority))
        current_elts.push_back (elements[++i]);
 
index 2b88e0807ac55a13af98475e17f29028188560e3..e703f9e9f796c62a837fe36843584c32fe70c461 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 47c5b7fa485b7675de9c7287e718cf95f210a5fa..b28d8f8e0f29e2c71e06b8c83544855fd183b9b7 100644 (file)
@@ -409,7 +409,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
@@ -1237,7 +1237,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 654230866942aba3d2497a2b0108a0dd572ab23e..542ce8e455c61f6191a48c7a4d040948abd61285 100644 (file)
@@ -159,13 +159,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 7b19d75fdc33eeff6b1ebadf7cdb04e661773b6f..58d27fc76a28fb4f1d5d62a7f57327d7b708b834 100644 (file)
@@ -217,7 +217,7 @@ Break_alignment_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 b7eddd6f225fbf060f4a762143b2d2725ff0c79e..0d0733b1e8a4509146beb27da4a7d4da999e1a4c 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 efec74286012ac0311ba89406584a90cff582872..e11163bf4d23c2e7093432a75a4426467c99296f 100644 (file)
@@ -42,7 +42,7 @@ Melody_spanner::calc_neutral_stem_direction (SCM smob)
     next_nonneutral++;
 
   SCM retval = SCM_EOL;
-  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 7849f5f3de3bff3b7add2e6000b99f03712951f1..11d32cd82419d9b084cf304cceef14d447ade1da 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 8c3b8fb799196b6964ef59a5d5741c00729bba4a..e531b7f4addd8de689e58e797c66e6d02a0d59f1 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 5949c49f7ad334bffc0e15c0268054e94a7ec8d6..2ebd53814e3927c3a8120b23befe94847561c3f3 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 cdc9d9d43d73934d575ed14f3d75f061c2f026cf..522ae7559eb46e029d539549607f274534a7d7ff 100644 (file)
@@ -287,7 +287,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 409af47bf9875a3652dd9466382b8bb5f1216933..58c66ed09d69b71c1f8c26d939c1c5b87e869130 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 d91f8cc266195edcee46a93dff9a9caa0c17a68e..5f28644ba6451acd847da9e2036f6f45b61282ec 100644 (file)
@@ -409,7 +409,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 ());
@@ -419,7 +419,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];
@@ -484,7 +484,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]);
@@ -495,7 +495,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_);
@@ -528,7 +528,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 ee21f51c91d4fb1bb08dcd1253e1784143b3f989..920e66bd03a04eada7338482014d4e5d5b166d12 100644 (file)
@@ -204,7 +204,7 @@ Spacing_spanner::prune_loose_columns (Grob *me,
     {
       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)
@@ -357,7 +357,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 aa91b4fcf280e1bbe6d862e5a96d765bf53c8fad..3a69e26802aa46cd42ad2e78bd58df58efd3beed 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 42dfe5997bdc0bb291160a8441bf0a2f01fecd8e..50848ecc598a2ae8c33f944605e6efd3ce2967d5 100644 (file)
@@ -223,7 +223,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 d83e2e7166dc95ff4f38e04998fd68653e5c0afd..abcc342181f91095ed87430e2863906f047550e7 100644 (file)
@@ -954,7 +954,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 cd8038494b631143a4c24e7be41566f5131132b6..c25d2a9a4e6f547ac42cfc76a334aa5011730fb8 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_)