]> git.donarmstrong.com Git - lilypond.git/commitdiff
*** empty log message ***
authorJan Nieuwenhuizen <janneke@gnu.org>
Thu, 2 Feb 2006 00:43:26 +0000 (00:43 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Thu, 2 Feb 2006 00:43:26 +0000 (00:43 +0000)
14 files changed:
ChangeLog
flower/include/array.hh
flower/include/array.icc
flower/include/parray.hh
flower/include/std-vector.hh
flower/test-std.cc
lily/beam.cc
lily/grob-pq-engraver.cc
lily/keyword.cc
lily/new-fingering-engraver.cc
lily/program-option.cc
lily/span-bar.cc
lily/stem.cc
lily/tuplet-engraver.cc

index c962264fa3640e65b17fd4a532dfea3398ab0d0b..946f88a3bf4b262ede1a631b9757c98430c4f1e5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,7 +4,10 @@
 
 2006-02-02  Jan Nieuwenhuizen  <janneke@gnu.org>
 
-       * flower/include/std-vector.hh (slice): Remove.
+       * flower/include/std-vector.hh (sort): Remove, replace by
+       ::vector_sort.  Update callers.
+
+       * flower/include/std-vector.hh (slice): Remove.  Update callers.
        (sort): Bugfix.
 
        * flower/test-std.cc (vector_sort): New test.
index fbd3d83620f68808658c1a2d150f5a8876668703..f057dfd06d40740e3dc5169e1bf94878a315421e 100644 (file)
@@ -319,9 +319,6 @@ public:
     elem_ref (i) = back ();
     resize (size () -1);
   }
-  // quicksort.
-  void sort (int (*compare) (T const &, T const &),
-            vsize lower=VPOS, vsize upper=VPOS);
   void concat (Array<T> const &src)
   {
     vsize s = size_;
@@ -331,17 +328,6 @@ public:
   void reverse ();
 };
 
-template<class T>
-int default_compare (T const &a, T const &b)
-{
-  if (a < b)
-    return -1;
-  else if (a > b)
-    return 1;
-  else
-    return 0;
-}
-
 #include "array.icc"
 
 }
index 4f1a9d0bf959231c2151479cd9d0c63da304d053..839d59a5327761ca35f071e73f9be8459d7b6774 100644 (file)
@@ -51,24 +51,25 @@ Array<T>::insert (T k, vsize j)
   array_[j] = k;
 }
 
-template<class T> INLINE void
-Array<T>::sort (int (*compare) (T const &, T const &), vsize lower, vsize upper)
+template<typename T> INLINE void
+vector_sort (Array<T> &v, int (*compare) (T const &, T const &),
+            vsize lower=-1, vsize upper=-1)
 {
   if (lower < 0)
     {
       lower = 0;
-      upper = size () - 1;
+      upper = v.size () - 1;
     }
   if (lower >= upper)
     return;
-  swap (lower, (lower + upper) / 2);
+  v.swap (lower, (lower + upper) / 2);
   vsize last = lower;
   for (vsize i = lower +1; i <= upper; i++)
-    if (compare (array_[i], array_[lower]) < 0)
-      swap (++last, i);
+    if (compare (v.array_[i], v.array_[lower]) < 0)
+      v.swap (++last, i);
   swap (lower, last);
-  sort (compare, lower, last - 1);
-  sort (compare, last + 1, upper);
+  vector_sort (v, compare, lower, last - 1);
+  vector_sort (v, compare, last + 1, upper);
 }
 
 template<class T> INLINE void
index d89c2b95d2afde526458ce45f0b540a40c7dbbf4..645091f2a3dcd35561238ca1fde3e2425e8834f1 100644 (file)
@@ -42,6 +42,7 @@ public:
   }
 
   Array<void *>::begin;
+  Array<void *>::end;
   Array<void *>::clear;
   Array<void *>::erase;
   Array<void *>::resize;
index dd3f97e30fcd30513dd805fad2a6f8b6c2a3eea3..022d107b02e67a3cae17499b7240073a2b62e03b 100644 (file)
@@ -162,12 +162,6 @@ namespace std {
       ::std::reverse (this->begin (), this->end ());
     }
 
-    void
-    sort (int (*compare) (T const &, T const &), vsize b=0, int e=VPOS)
-    {
-      ::std::sort (iter (b), iter(e), compare);
-    }
-
     void swap (vsize i, vsize j)
     {
       T t ((*this)[i]);
@@ -248,6 +242,48 @@ namespace std {
   }
 #endif
 
+
+#if 0
+  /* FIXME: the simple test works, but lily barfs.  */
+  template<typename T>
+  void
+  vector_sort (vector<T> &v, int (*compare) (T const &, T const &),
+              vsize lower=VPOS, vsize upper=VPOS)
+  {
+    typename vector<T>::iterator b = v.begin ();
+    typename vector<T>::iterator e = v.begin ();
+    if (lower == VPOS)
+      {
+       lower = 0;
+       upper = v.size ();
+      }
+    ::std::sort (b + lower, e + upper, compare);
+  }
+#else
+  // ugh, c&p
+template<typename T> void
+vector_sort (vector<T> &v, int (*compare) (T const &, T const &),
+            vsize lower=VPOS, vsize upper=VPOS)
+{
+  if (lower == VPOS)
+    {
+      lower = 0;
+      upper = v.size () - 1;
+    }
+  if (upper == VPOS || lower >= upper)
+    return;
+  v.swap (lower, (lower + upper) / 2);
+  vsize last = lower;
+  for (vsize i = lower +1; i <= upper; i++)
+    if (compare (v[i], v[lower]) < 0)
+      v.swap (++last, i);
+  v.swap (lower, last);
+  vector_sort (v, compare, lower, last - 1);
+  vector_sort (v, compare, last + 1, upper);
+}
+  
+#endif
+
 }
 
 
@@ -273,6 +309,18 @@ namespace std {
 
 #endif /* STD_VECTOR */
 
+template<typename T>
+int default_compare (T const &a, T const &b)
+{
+   if (a < b)
+     return -1;
+   else if (a > b)
+     return 1;
+   else
+     return 0;
+}
+
 #include "array.hh"
 
 #endif /* STD_VECTOR_HH */
index eeceaddb1565f4d35a06367aa2cd4ac47cd8c39f..729073f8c69a08b7d05611c827ae4b5550212cdd 100644 (file)
@@ -59,13 +59,17 @@ BOOST_AUTO_UNIT_TEST (vector_slice)
 #endif
 }
 
-BOOST_AUTO_UNIT_TEST (vector_sort)
+BOOST_AUTO_UNIT_TEST (vector_sorting)
 {
   vector<int> v;
   v.push_back (2);
   v.push_back (1);
   v.push_back (0);
+#if VECTOR_SORT
   v.sort (default_compare);
+#else
+  vector_sort (v, default_compare);
+#endif
   print (v);
   BOOST_CHECK_EQUAL (v[0], 0);
   BOOST_CHECK_EQUAL (v[1], 1);
@@ -78,6 +82,6 @@ init_unit_test_suite (int, char**)
   test_suite *test = BOOST_TEST_SUITE("std::Flower");
   test->add (BOOST_TEST_CASE (vector_erase));
   test->add (BOOST_TEST_CASE (vector_slice));
-  test->add (BOOST_TEST_CASE (vector_sort));
+  test->add (BOOST_TEST_CASE (vector_sorting));
   return test;
 }
index 08e22e72baa64fb517b6bcdf6a6e24b342367c60..9d5d5aa212560f6c133cd4b8e03d40f282312ed0 100644 (file)
@@ -401,7 +401,7 @@ Beam::print (SCM grob)
          gap_count = scm_to_int (me->get_property ("gap-count"));
          gapped = Lookup::beam (slope, w - 2 * gap_length, thick, blot);
 
-         full_beams.sort (default_compare);
+         vector_sort (full_beams, default_compare);
          if (stem_dir == UP)
            full_beams.reverse ();
        }
index 1e55f60bde8f55f19787b8184811aad066e73426..a8e1081704e13c993a3cd022b2dd8c7fbba046e8 100644 (file)
@@ -95,7 +95,7 @@ Grob_pq_engraver::stop_translation_timestep ()
   while (scm_is_pair (busy) && *unsmob_moment (scm_caar (busy)) == now)
     busy = scm_cdr (busy);
 
-  started_now_.sort (Grob_pq_entry::compare);
+  vector_sort (started_now_, Grob_pq_entry::compare);
   SCM lst = SCM_EOL;
   SCM *tail = &lst;
   for (vsize i = 0; i < started_now_.size (); i++)
index d854fbeecd324327f0e9d0dc8fb9df25a5e498d3..7279ba52911626574f743e588394492c048f1139 100644 (file)
@@ -19,7 +19,7 @@ Keyword_table::Keyword_table (Keyword_ent *tab)
   while (tab->name_)
     table_.push_back (*tab++);
 
-  table_.sort (tabcmp);
+  vector_sort (table_, tabcmp);
 }
 
 vsize
index 02bb58267bc26785e1499f7e45aea9f7e5f5b9cd..d049e1664ab092f307075da6fd0eb1b0224aee19 100644 (file)
@@ -220,7 +220,7 @@ New_fingering_engraver::position_scripts (SCM orientations,
        }
     }
 
-  scripts->sort (&Finger_tuple::compare);
+  vector_sort (*scripts, Finger_tuple::compare);
 
   bool up_p = scm_c_memq (ly_symbol2scm ("up"), orientations) != SCM_BOOL_F;
   bool down_p = scm_c_memq (ly_symbol2scm ("down"), orientations) != SCM_BOOL_F;
index 9a756af0edd994b28abd98f4f923d1f24855041d..7174b82cb9344bd4451ccc9cca274d5c0afa194d 100644 (file)
@@ -126,7 +126,7 @@ get_help_string ()
     }
 
   std::string help ("Options supported by ly:set-option\n\n");
-  opts.sort (string_compare);
+  vector_sort (opts, string_compare);
   for (vsize i = 0; i < opts.size (); i++)
     help += opts[i];
 
index 6290277358bcf80e7c5cb6902445b74aaed3e558..14debf7c9852f9d8fa19da708d4a1eae57b63f26 100644 (file)
@@ -72,7 +72,7 @@ Span_bar::print (SCM smobbed_me)
   if (!model_bar)
     model_bar = me;
 
-  extents.sort (&Interval::left_comparison);
+  vector_sort (extents, Interval::left_comparison);
 
   Stencil span_bar;
   for (vsize i = 1; i < extents.size (); i++)
index 41f039f623469c47e0062fdd04c8389a91148137..937b17c824c155c2e8ebb9d63a7c2bb89a49a873 100644 (file)
@@ -195,7 +195,7 @@ Stem::note_head_positions (Grob *me)
       ps.push_back (p);
     }
 
-  ps.sort (integer_compare);
+  vector_sort (ps, integer_compare);
   return ps;
 }
 
index 5ad157de110c2246bbb5817913683ea480028fa0..ef54824044733febcb283094919e03dd9106080c 100644 (file)
@@ -80,7 +80,7 @@ Tuplet_engraver::process_music ()
   if (!tuplets_.size ())
     return;
 
-  tuplets_.sort (&Tuplet_description::compare);
+  vector_sort (tuplets_, Tuplet_description::compare);
   for (vsize i = 0; i < tuplets_.size (); i++)
     {
       if (tuplets_[i].bracket_)