From 1239b00815b295bc00c6bb87012d72ac16d35648 Mon Sep 17 00:00:00 2001
From: janneke <janneke>
Date: Wed, 1 Feb 2006 00:09:15 +0000
Subject: [PATCH] * flower/include/std-vector.hh (del): Remove.  Use erase (),
 update callers.

* flower/include/array.hh (begin, end): Add.
(del, get): Remove.
---
 ChangeLog                      |   8 +++
 flower/include/array.hh        | 103 ++++++++++++++++++++++-----------
 flower/include/parray.hh       |  33 +++++++----
 flower/include/std-vector.hh   |   7 ---
 flower/interval-set.cc         |   2 +-
 lily/accidental-engraver.cc    |   2 +-
 lily/align-interface.cc        |   2 +-
 lily/beam-concave.cc           |   2 +-
 lily/bezier.cc                 |   2 +-
 lily/break-algorithm.cc        |   4 +-
 lily/break-align-interface.cc  |   2 +-
 lily/dot-column.cc             |   2 +-
 lily/new-fingering-engraver.cc |   4 +-
 lily/note-spacing.cc           |   2 +-
 lily/paper-column.cc           |   5 +-
 lily/piano-pedal-engraver.cc   |   2 +-
 lily/tie-engraver.cc           |   2 +-
 lily/tuplet-engraver.cc        |   2 +-
 18 files changed, 114 insertions(+), 72 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 91a89e14d0..4379998871 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-02-01  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* flower/include/std-vector.hh (del): Remove.  Use erase (),
+	update callers.
+
+	* flower/include/array.hh (begin, end): Add.
+	(del, get): Remove.
+
 2006-02-01  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
 	* lily/prob.cc (Prob): copy type_ too.
diff --git a/flower/include/array.hh b/flower/include/array.hh
index 400aeea233..9a5b2e4026 100644
--- a/flower/include/array.hh
+++ b/flower/include/array.hh
@@ -109,8 +109,75 @@ public:
     size_ = s;
   }
 
+  T*
+  data ()
+  {
+    return array_;
+  }
+
+  typedef T* iterator;
+
+  iterator
+  begin ()
+  {
+    return data ();
+  }
+
+  iterator const
+  begin () const
+  {
+    return data ();
+  }
+  
+  iterator
+  end ()
+  {
+    return data () + size_;
+  }
+
+  iterator const
+  end () const
+  {
+    return data () + size_;
+  }
+
+  void clear ()
+  {
+    resize (0);
+  }
+
+  /* std::vector uses unchecked variant for [] */
+  T &operator [] (vsize i)
+  {
+    return elem_ref (i);
+  }
+
+  /* std::vector uses unchecked variant for [] */
+  T const &operator [] (vsize i) const
+  {
+    return elem_ref (i);
+  }
+
+  iterator
+  erase (iterator p)
+  {
+    vsize i = p - data ();
+#if !STD_VECTOR
+    assert (i >= 0 && i < size_);
+#else
+    assert (i < size_);
+#endif
+    arrcpy (array_ + i, array_ + i + 1, size_ - i - 1);
+    size_--;
+    return p;
+  }
+
 
 
+
+  /* Flower intererface */
+
+  
   /// check invariants
   void OK () const;
   /** report the size_.
@@ -118,12 +185,6 @@ public:
       {setsize_}
   */
 
-  /// POST: size () == 0
-  void clear ()
-  {
-    size_ = 0;
-  }
-
   Array (T *tp, vsize n)
   {
     array_ = new T[n];
@@ -169,16 +230,6 @@ public:
 
   T *remove_array ();
 
-  /// access element
-  T &operator [] (vsize i)
-  {
-    return elem_ref (i);
-  }
-  /// access element
-  T const &operator [] (vsize i) const
-  {
-    return elem_ref (i);
-  }
   /// access element
   T &elem_ref (vsize i) const
   {
@@ -251,30 +302,12 @@ public:
   }
 
   void insert (T k, vsize j);
-  /**
-     remove  i-th element, and return it.
-  */
-  T get (vsize i)
-  {
-    T t = elem (i);
-    del (i);
-    return t;
-  }
+
   void unordered_del (vsize i)
   {
     elem_ref (i) = back ();
     resize (size () -1);
   }
-  void del (vsize i)
-  {
-#if !STD_VECTOR
-    assert (i >= 0 && i < size_);
-#else
-    assert (i < size_);
-#endif
-    arrcpy (array_ + i, array_ + i + 1, size_ - i - 1);
-    size_--;
-  }
   // quicksort.
   void sort (int (*compare) (T const &, T const &),
 	     vsize lower=VPOS, vsize upper=VPOS);
diff --git a/flower/include/parray.hh b/flower/include/parray.hh
index 4378dda8b8..40dcb22305 100644
--- a/flower/include/parray.hh
+++ b/flower/include/parray.hh
@@ -41,15 +41,18 @@ public:
     return (T *&) Array<void *>::back ();
   }
 
-  /* Flower compat */
-  Array<void *>::del;
-  Array<void *>::unordered_del;
-  Array<void *>::size;
+  Array<void *>::begin;
   Array<void *>::clear;
+  Array<void *>::erase;
   Array<void *>::resize;
+  Array<void *>::size;
   Array<void *>::empty;
-  Array<void *>::reverse;
   Array<void *>::pop_back;
+
+
+  /* Flower compat */
+  Array<void *>::unordered_del;
+  Array<void *>::reverse;
   Array<void *>::tighten_maxsize;
 
   static int default_compare (T *const &p1, T *const &p2)
@@ -122,7 +125,7 @@ public:
       if (new_p)
 	elem_ref (i) = new_p;
       else
-	del (i);
+	erase (begin () + i);
   }
   void unordered_substitute (T *old, T *new_p)
   {
@@ -137,6 +140,7 @@ public:
   {
     sort (default_compare);
   }
+
   // quicksort.
   void sort (int (*compare) (T *const &, T *const &),
 	     int lower = -1, int upper = -1);
@@ -171,9 +175,14 @@ public:
   {
     return (T **) Array<void *>::accesses ();
   }
-  T *get (int i)
+  /**
+     remove  i-th element, and return it.
+  */
+  T *get (vsize i)
   {
-    return (T *) Array<void *>::get (i);
+    T *t = elem (i);
+    Array<void*>::erase (Array<void*>::begin () + i);
+    return t;
   }
   Link_array<T>
   slice (int l, int u) const
@@ -268,8 +277,8 @@ binsearch (Array<T> const &arr, T t, int (*compare) (T const &, T const &))
 
   if (!compare (t, arr[lo]))
     return lo;
-  else
-    return -1;              /* not found */
+  /* not found */
+  return -1;
 }
 
 template<class T>
@@ -301,8 +310,8 @@ binsearch_links (Link_array<T> const &arr, T *t,
 
   if (!compare (t, arr[lo]))
     return lo;
-  else
-    return -1;              /* not found */
+  /* not found */
+  return -1;
 }
 
 template<class T>
diff --git a/flower/include/std-vector.hh b/flower/include/std-vector.hh
index 8fda47c8b2..ce88a5d628 100644
--- a/flower/include/std-vector.hh
+++ b/flower/include/std-vector.hh
@@ -41,7 +41,6 @@ namespace std {
   {
   public:
     typedef typename __vector<T>::iterator iterator;
-    //typedef int (*compare) (T *const&, T *const&);
 
     vector<T> () : __vector<T> ()
     {
@@ -108,12 +107,6 @@ namespace std {
 	return this->at (i);
     }
 
-    T
-    del (vsize i)
-    {
-      return *__vector<T>::erase (iter (i));
-    }
-
     T const &
     elem (vsize i) const
     {
diff --git a/flower/interval-set.cc b/flower/interval-set.cc
index 7c8bd0e6a1..2073afda61 100644
--- a/flower/interval-set.cc
+++ b/flower/interval-set.cc
@@ -52,7 +52,7 @@ Interval_set::remove_interval (Interval rm)
 	      allowed_regions_.insert (before, i);
 	      i++;
 	    }
-	  allowed_regions_.del (i);
+	  allowed_regions_.erase (allowed_regions_.begin () + i);
 	  if (!after.is_empty () && after.length () > 0.0)
 	    {
 	      allowed_regions_.insert (after, i);
diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc
index 2a3af602c1..b240dfa032 100644
--- a/lily/accidental-engraver.cc
+++ b/lily/accidental-engraver.cc
@@ -462,7 +462,7 @@ Accidental_engraver::stop_translation_timestep ()
 		g->set_object ("tie", ties_[j]->self_scm ());
 		accidentals_[i].tied_ = true;
 	      }
-	    ties_.del (j);
+	    ties_.erase (ties_.begin () + j);
 	    break;
 	  }
     }
diff --git a/lily/align-interface.cc b/lily/align-interface.cc
index 85074a4cf3..2355ce11f4 100644
--- a/lily/align-interface.cc
+++ b/lily/align-interface.cc
@@ -110,7 +110,7 @@ Align_interface::align_to_fixed_distance (Grob *me, Axis a)
 	Hara_kiri_group_spanner::consider_suicide (elems[j]);
 
       if (!elems[j]->is_live ())
-	elems.del (j);
+	elems.erase (elems.begin () + j);
     }
 
   for (vsize j = 0; j < elems.size (); j++)
diff --git a/lily/beam-concave.cc b/lily/beam-concave.cc
index 00ceb61dcd..81581bc66b 100644
--- a/lily/beam-concave.cc
+++ b/lily/beam-concave.cc
@@ -97,7 +97,7 @@ Beam::calc_concaveness (SCM smob)
   for (vsize i = stems.size (); i--;)
     {
       if (Stem::is_invisible (stems[i]))
-	stems.del (i);
+	stems.erase (stems.begin () + i);
       else
 	{
 	  if (Direction dir = get_grob_direction (stems[i]))
diff --git a/lily/bezier.cc b/lily/bezier.cc
index 193018f210..47d0184329 100644
--- a/lily/bezier.cc
+++ b/lily/bezier.cc
@@ -174,7 +174,7 @@ filter_solutions (std::vector<Real> sol)
 {
   for (vsize i = sol.size (); i--;)
     if (sol[i] < 0 || sol[i] > 1)
-      sol.del (i);
+      sol.erase (sol.begin () + i);
   return sol;
 }
 
diff --git a/lily/break-algorithm.cc b/lily/break-algorithm.cc
index abe15eea2f..662ae54d1b 100644
--- a/lily/break-algorithm.cc
+++ b/lily/break-algorithm.cc
@@ -27,7 +27,7 @@ Break_algorithm::find_break_indices () const
 
   if (linewidth_ <= 0)
     while (retval.size () > 2)
-      retval.del (1);
+      retval.erase (retval.begin () + 1);
 
   return retval;
 }
@@ -44,7 +44,7 @@ Break_algorithm::find_breaks () const
 
   if (linewidth_ <= 0)
     while (retval.size () > 2)
-      retval.del (1);
+      retval.erase (retval.begin () + 1);
 
   return retval;
 }
diff --git a/lily/break-align-interface.cc b/lily/break-align-interface.cc
index 3aff11a20e..ac5cfa33f3 100644
--- a/lily/break-align-interface.cc
+++ b/lily/break-align-interface.cc
@@ -74,7 +74,7 @@ Break_align_interface::ordered_elements (Grob *grob)
 	  if (g && sym == g->get_property ("break-align-symbol"))
 	    {
 	      new_elts.push_back (g);
-	      writable_elts.del (i);
+	      writable_elts.erase (writable_elts.begin () + i);
 	    }
 	}
     }
diff --git a/lily/dot-column.cc b/lily/dot-column.cc
index 78dbcabb4c..84f56b6418 100644
--- a/lily/dot-column.cc
+++ b/lily/dot-column.cc
@@ -230,7 +230,7 @@ Dot_column::calc_positioning_done (SCM smob)
   dots.sort (compare_position);
   for (vsize i = dots.size (); i--;)
     if (!dots[i]->is_live ())
-      dots.del (i);
+      dots.erase (dots.begin () + i);
 
   Dot_configuration cfg;
   for (vsize i = 0;i < dots.size (); i++)
diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc
index 9c1bb10d7d..23d735ec9f 100644
--- a/lily/new-fingering-engraver.cc
+++ b/lily/new-fingering-engraver.cc
@@ -216,7 +216,7 @@ New_fingering_engraver::position_scripts (SCM orientations,
       if (to_dir (d))
 	{
 	  ((to_dir (d) == UP) ? up : down).push_back ((*scripts)[i]);
-	  scripts->del (i);
+	  scripts->erase (scripts->begin () + i);
 	}
     }
 
@@ -238,7 +238,7 @@ New_fingering_engraver::position_scripts (SCM orientations,
       if (down_p && !down.size () && scripts->size ())
 	{
 	  down.push_back ((*scripts)[0]);
-	  scripts->del (0);
+	  scripts->erase (scripts->begin ());
 	}
 
       horiz.concat (*scripts);
diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc
index 8206b3b4e9..78b1bcaf4a 100644
--- a/lily/note-spacing.cc
+++ b/lily/note-spacing.cc
@@ -227,7 +227,7 @@ Note_spacing::right_column (Grob *me)
       for (vsize i = right.size (); i--;)
 	{
 	  if (dynamic_cast<Item *> (right[i])->get_column () != mincol)
-	    right.del (i);
+	    right.erase (right.begin () + i);
 	}
     }
 
diff --git a/lily/paper-column.cc b/lily/paper-column.cc
index 3094f81759..5688d49e61 100644
--- a/lily/paper-column.cc
+++ b/lily/paper-column.cc
@@ -164,9 +164,8 @@ Paper_column::before_line_breaking (SCM grob)
       Grob *g = array[i];
 
       if (!g || !g->is_live ())
-	{			// UGH . potentially quadratic.
-	  array.del (i);
-	}
+	/* UGH . potentially quadratic. */
+	array.erase (array.begin () + i);
     }
 
   return SCM_UNSPECIFIED;
diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc
index 646c7e79d4..1177347f09 100644
--- a/lily/piano-pedal-engraver.cc
+++ b/lily/piano-pedal-engraver.cc
@@ -440,7 +440,7 @@ Piano_pedal_engraver::del_linespanner (Spanner *g)
 {
   int idx = previous_.find_index (g);
   if (idx >= 0)
-    previous_.del (idx);
+    previous_.erase (previous_.begin () + idx);
 }
 
 void
diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc
index a52a2c73b3..9ec95d91a1 100644
--- a/lily/tie-engraver.cc
+++ b/lily/tie-engraver.cc
@@ -121,7 +121,7 @@ Tie_engraver::acknowledge_note_head (Grob_info i)
 	  Tie::set_head (p, RIGHT, h);
 
 	  ties_.push_back (p);
-	  heads_to_tie_.del (i);
+	  heads_to_tie_.erase (heads_to_tie_.begin () + i);
 	}
     }
 
diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc
index 3d24023e41..5ad157de11 100644
--- a/lily/tuplet-engraver.cc
+++ b/lily/tuplet-engraver.cc
@@ -166,7 +166,7 @@ Tuplet_engraver::start_translation_timestep ()
 	}
 
       if (now.main_part_ >= tuplets_[i].stop_)
-	tuplets_.del (i);
+	tuplets_.erase (tuplets_.begin () + i);
     }
 }
 
-- 
2.39.5