]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/include/pqueue.hh
Run `make grand-replace'.
[lilypond.git] / flower / include / pqueue.hh
index c80dae2131690048dec823535dab78ca753b3d1b..fa28ca011d574eec179824653de1368fabcdda97 100644 (file)
@@ -3,22 +3,22 @@
 
   source file of the Flower Library
 
-  (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef PQUEUE_HH
 #define PQUEUE_HH
-#include "array.hh"
+#include "std-vector.hh"
 
-template < class K, class T>
+template<class K, class T>
 struct PQueue_ent
 {
   T val;
   K key;
 };
 
-template < class K, class T>
-int compare (PQueue_ent < K, T> const &e1, PQueue_ent < K, T> const &e2)
+template<class K, class T>
+int compare (PQueue_ent<K, T> const &e1, PQueue_ent<K, T> const &e2)
 {
   return compare (e1.key, e2.key);
 }
@@ -34,12 +34,12 @@ int compare (PQueue_ent < K, T> const &e1, PQueue_ent < K, T> const &e2)
 template<class T>
 class PQueue
 {
-  Array<T> heap_array_;
-  T &elt (int i)
+  vector<T> heap_array_;
+  T &elt (vsize i)
   {
     return heap_array_[i - 1];
   }
-  T const &elt (int i) const
+  T const &elt (vsize i) const
   {
     return heap_array_[i - 1];
   }
@@ -48,22 +48,34 @@ public:
       priority might fuck up the invariants
 
       @param 1 <= i < size () */
-  T &operator[] (int i) { return heap_array_[i]; }
-  T operator[] (int i) const { return heap_array_[i]; }
+  T &operator [] (vsize i)
+  {
+    return heap_array_[i];
+  }
+  T operator [] (vsize i) const
+  {
+    return heap_array_[i];
+  }
   void OK () const
   {
 #ifndef NDEBUG
-    for (int i =2; i <= size (); i++)
+    for (vsize i = 2; i <= size (); i++)
       assert (compare (elt (i / 2), elt (i)) <= 0);
 #endif
   }
-  T front () const { return elt (1); }
-  int size () const { return heap_array_.size (); }
+  T front () const
+  {
+    return elt (1);
+  }
+  vsize size () const
+  {
+    return heap_array_.size ();
+  }
   void insert (T v)
   {
-    heap_array_.push (v);
-    int i = heap_array_.size ();
-    int j = i / 2;
+    heap_array_.push_back (v);
+    vsize i = heap_array_.size ();
+    vsize j = i / 2;
     while (j)
       {
        if (compare (elt (j), v) > 0)
@@ -73,10 +85,7 @@ public:
            j = i / 2;
          }
        else
-
-         {
-           break;
-         }
+         break;
       }
     elt (i) = v;
     OK ();
@@ -90,14 +99,14 @@ public:
   void delmin ()
   {
     assert (size ());
-    T last = heap_array_.top ();
+    T last = heap_array_.back ();
 
-    int mini = 2;
-    int lasti = 1;
+    vsize mini = 2;
+    vsize lasti = 1;
 
     while (mini < size ())
       {
-       if (compare (elt (mini + 1), elt (mini)) <0)
+       if (compare (elt (mini + 1), elt (mini)) < 0)
          mini++;
        if (compare (last, elt (mini)) < 0)
          break;
@@ -106,7 +115,7 @@ public:
        mini *= 2;
       }
     elt (lasti) = last;
-    heap_array_.pop ();
+    heap_array_.pop_back ();
     OK ();
   }
   T get ()