]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/include/array.icc
* lily/translator-def.cc (get_translator_names): new function
[lilypond.git] / flower / include / array.icc
index 47636d335493a42fc522783127bbf6352e47162d..40e409d73bad580436025dd50a3d3b765adc45c1 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  (c) Han-Wen Nienhuys 1995,96,97,98
+  (c) 1995--2003  Han-Wen Nienhuys 
 
   Distributed under GNU GPL
 */
@@ -44,8 +44,8 @@ Array<T>::insert (T k, int j)
   assert (j >=0 && j<= size_);
   set_size (size_+1);
   for (int i=size_-1; i > j; i--)
-    array_p_[i] = array_p_[i-1];
-  array_p_[j] = k;
+    array_[i] = array_[i-1];
+  array_[j] = k;
 }
 
 template<class T> INLINE void
@@ -61,7 +61,7 @@ Array<T>::sort (int (*compare) (T const&,T const&), int lower, int upper)
   swap (lower, (lower+upper)/2);
   int last = lower;
   for (int i= lower +1; i <= upper; i++)
-    if (compare (array_p_[i], array_p_[lower]) < 0)
+    if (compare (array_[i], array_[lower]) < 0)
       swap (++last,i);
   swap (lower, last);
   sort (compare, lower, last-1);
@@ -81,17 +81,17 @@ void
 Array<T>::OK () const
 {
   assert (max_ >= size_ && size_ >=0);
-  if (max_) assert (array_p_);
+  if (max_) assert (array_);
 }
 
 template<class T> INLINE
 T *
-Array<T>::remove_array_p ()
+Array<T>::remove_array ()
 {
-  T * p = array_p_;
+  T * p = array_;
   size_ = 0;
   max_ = 0;
-  array_p_ =0;
+  array_ =0;
   return p;
 }
 
@@ -103,11 +103,37 @@ Array<T>::slice (int lower, int upper) const
   Array<T> r;
   int s =upper-lower;
   r.set_size (s);
-  arrcpy (r.array_p_, array_p_  + lower, s);
+  arrcpy (r.array_, array_  + lower, s);
   return r;
 }
 
 
+template<class T>
+void
+binary_search_bounds (Array<T> const &table,
+                     T const &key, int (*compare) (T const&, T const &),
+                     int *lo,
+                     int *hi)
+{
+  int cmp;
+  int result;
+
+  /* binary search */
+  do
+  {
+      cmp = (*lo + *hi) / 2;
+
+      result = (*compare)  (key, table[cmp]);
+
+      if (result < 0)
+          *hi = cmp;
+      else
+          *lo = cmp;
+    }
+  while (*hi - *lo > 1);
+}
+
+
 /*
   lookup with binsearch, return array index.
 */
@@ -119,24 +145,11 @@ binary_search (Array<T> const &table,
               int hi = -1
               ) 
 {
-  int cmp;
-  int result;
   if (hi < 0)
     hi = table.size ();
 
-  /* binary search */
-  do
-  {
-      cmp = (lo + hi) / 2;
-
-      result = (*compare)  (key, table[cmp]);
+  binary_search_bounds (table, key, compare, &lo, &hi);
 
-      if (result < 0)
-          hi = cmp;
-      else
-          lo = cmp;
-    }
-  while (hi - lo > 1);
   if (! (*compare) (key, table[lo]))
     {
       return lo;
@@ -144,4 +157,3 @@ binary_search (Array<T> const &table,
   else
     return -1;              /* not found */
 }
-