]> git.donarmstrong.com Git - lilypond.git/commitdiff
* flower/test-std.cc: Add simple unit test for vector migration.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 1 Feb 2006 23:53:13 +0000 (23:53 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 1 Feb 2006 23:53:13 +0000 (23:53 +0000)
* stepmake/stepmake/test*: Unit test support.

ChangeLog
flower/include/array.hh
flower/include/array.icc
flower/include/parray.hh
flower/include/std-vector.hh
flower/test-std.cc
lily/beaming-info.cc
lily/new-fingering-engraver.cc

index 0d57a291bff86d87a63265b39ba42afef09d9a7c..14c7311b087899c481b214cc3a8dcc9d06872fb4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2006-02-02  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * flower/include/std-vector.hh (slice): Remove.
+
 2006-02-01  Graham Percival  <gpermus@gmail.com>
 
        * Documentation/user/putting.itely: fixes from Erik.
index 9a5b2e40266d8260efc3fbfb070109592ab6af02..fbd3d83620f68808658c1a2d150f5a8876668703 100644 (file)
@@ -38,7 +38,8 @@ template<class T> void arrcpy (T *dest, T const *src, int count);
 template<class T>
 class Array
 {
-protected:
+public:
+
   /// maximum length of array.
   vsize max_;
 
@@ -60,6 +61,9 @@ protected:
 
 public:
   /* std::vector interface */
+  typedef T* iterator;
+  typedef T const* const_iterator;
+
   Array ()
   {
     array_ = 0;
@@ -73,6 +77,8 @@ public:
     max_ = size_ = src.size_;
   }
 
+  Array (const_iterator begin, const_iterator end);
+    
   T const &back () const
   {
     return (*this)[size_ - 1];
@@ -115,7 +121,11 @@ public:
     return array_;
   }
 
-  typedef T* iterator;
+  T const*
+  data () const
+  {
+    return array_;
+  }
 
   iterator
   begin ()
@@ -123,7 +133,7 @@ public:
     return data ();
   }
 
-  iterator const
+  const_iterator
   begin () const
   {
     return data ();
@@ -135,7 +145,7 @@ public:
     return data () + size_;
   }
 
-  iterator const
+  const_iterator
   end () const
   {
     return data () + size_;
@@ -143,7 +153,8 @@ public:
 
   void clear ()
   {
-    resize (0);
+    //resize (0);
+    size_ = 0;
   }
 
   /* std::vector uses unchecked variant for [] */
@@ -317,7 +328,6 @@ public:
     resize (size_ + src.size_);
     arrcpy (array_ + s, src.array_, src.size_);
   }
-  Array<T> slice (vsize lower, vsize upper) const;
   void reverse ();
 };
 
index 3b6c27945c1ae65fef1abe3f2ae321e7c4471a71..4f1a9d0bf959231c2151479cd9d0c63da304d053 100644 (file)
@@ -104,19 +104,12 @@ Array<T>::remove_array ()
 }
 
 template<class T> INLINE
-Array<T>
-Array<T>::slice (vsize lower, vsize upper) const
+Array<T>::Array (const_iterator b, const_iterator e)
 {
-#if !STD_VECTOR
-  assert (lower >= 0 && lower <= upper && upper <= size_);
-#else
-  assert (lower <= upper && upper <= size_);
-#endif
-  Array<T> r;
-  vsize s = upper - lower;
-  r.resize (s);
-  arrcpy (r.array_, array_ + lower, s);
-  return r;
+  vsize n = e - b;
+  array_ = new T[n];
+  max_ = size_ = n;
+  arrcpy (array_, b, n);
 }
 
 template<class T>
index 40dcb2230570269296fc59169557c5be31efb92c..d89c2b95d2afde526458ce45f0b540a40c7dbbf4 100644 (file)
@@ -21,7 +21,7 @@ template<class T>
 class Link_array : private Array<void *>
 {
 
-  Link_array (Array<void *> v)
+  Link_array (Array<void *> const &v)
     :Array<void *> (v)
   {
   }
@@ -73,6 +73,7 @@ public:
     : Array<void *> (src)
   {
   }
+
   /// access element
   T *elem (int i) const
   {
@@ -187,7 +188,7 @@ public:
   Link_array<T>
   slice (int l, int u) const
   {
-    return Array<void *>::slice (l, u);
+    return Array<void *>::Array (begin () + l, begin () + u);
   }
   void concat (Link_array<T> const &a2)
   {
index db6cb9241e486d287eecf32786353a62fa5b8e52..e5920fee524c2ee5fd5eceaf0da637a3c0353825 100644 (file)
@@ -41,33 +41,32 @@ namespace std {
   {
   public:
     typedef typename __vector<T>::iterator iterator;
+    typedef typename __vector<T>::const_iterator const_iterator;
 
     vector<T> () : __vector<T> ()
     {
     }
 
-    vector<T> (iterator const b, iterator const e) : __vector<T> (b, e)
+    vector<T> (const_iterator b, const_iterator e) : __vector<T> (b, e)
     {
     }
 
-    vector<T> (vsize b, vsize e) : __vector<T> (iter (b), iter (e))
-    {
-    }
-
-    iterator iter (vsize n)
+    iterator
+    iter (vsize n)
     {
       if (n == VPOS)
        return this->end ();
       return __vector<T>::begin () + n;
     }
 
-    iterator const iter (vsize n) const
+    const_iterator
+    iter (vsize n) const
     {
       if (n == VPOS)
        return this->end ();
       return __vector<T>::begin () + n;
     }
-
+    
     void
     insert (T k, vsize i)
     {
@@ -163,12 +162,6 @@ namespace std {
       ::std::reverse (this->begin (), this->end ());
     }
 
-    vector<T>
-    slice (vsize b, vsize e) const
-    {
-      return vector<T> (b, e);
-    }
-
     void
     sort (int vsize=VPOS, vsize b=VPOS, vsize e=VPOS)
     {
@@ -210,7 +203,7 @@ namespace std {
                 vsize b=0, vsize e=VPOS)
   {
     //(void) compare;
-    vector<T>::iterator const i = find (v.iter (b), v.iter (e), key);
+    typename vector<T>::const_iterator i = find (v.iter (b), v.iter (e), key);
     if (i != v.end ())
       return i - v.begin ();
     return VPOS;
index 85e0a372fa040728c1555cf16d150f7010f3dec1..1e3f0f125ffc8f16b378ce738ea6d601d408d1eb 100644 (file)
 
 using boost::unit_test::test_suite;
 
+#if !STD_VECTOR
+#define vector flower_vector
+#endif
+
 template<typename T>
 void
 print (vector<T> v)
 {
   for (vsize i = 0; i < v.size (); i++)
     cout << "v[" << i << "] = " << v[i] << endl;
+  cout << endl;
 }
 
 BOOST_AUTO_UNIT_TEST (vector_erase)
@@ -23,23 +28,42 @@ BOOST_AUTO_UNIT_TEST (vector_erase)
   vector<int> v;
   v.push_back (0);
   v.push_back (1);
-  BOOST_CHECK_EQUAL (v.size (), 2u);
+  BOOST_CHECK_EQUAL (v.size (), vsize (2));
   v.erase (v.begin () + 1);
-  BOOST_CHECK_EQUAL (v.size (), 1u);
+  BOOST_CHECK_EQUAL (v.size (), vsize (1));
   BOOST_CHECK_EQUAL (v.back (), 0);
 
   v.push_back (1);
-  BOOST_CHECK_EQUAL (v.size (), 2u);
+  BOOST_CHECK_EQUAL (v.size (), vsize (2));
   v.erase (v.begin () + 0);
-  BOOST_CHECK_EQUAL (v.size (), 1u);
+  BOOST_CHECK_EQUAL (v.size (), vsize (1));
   BOOST_CHECK_EQUAL (v.back (), 1);
 }
 
+BOOST_AUTO_UNIT_TEST (vector_slice)
+{
+  vector<int> v;
+  v.push_back (0);
+  v.push_back (1);
+  v.push_back (2);
+  v.push_back (3);
+#if VECTOR_SLICE
+  BOOST_CHECK_EQUAL (v.slice (0, 0).size (), vsize (0));
+  BOOST_CHECK_EQUAL (v.slice (0, v.size ()).size (), v.size ());
+  BOOST_CHECK_EQUAL (v.slice (1, 2).size (), vsize (1));
+#else
+  BOOST_CHECK_EQUAL (vector<int> (v.begin (), v.begin ()).size (), vsize (0));
+  BOOST_CHECK_EQUAL (vector<int> (v.begin (), v.end ()).size (), v.size ());
+  BOOST_CHECK_EQUAL (vector<int> (v.begin () + 1, v.begin () + 2).size (),
+                    vsize (1));
+#endif
+}
 
 test_suite*
 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));
   return test;
 }
index 7a5428c1ba2a741d2c573f23e7840fdd159b14d2..9109aea5a726643625da16da79983b8c0e83d672 100644 (file)
@@ -68,8 +68,10 @@ Beaming_info_list::beamify (Moment &beat_length, bool subdivide)
   Drul_array<Beaming_info_list> splits;
   int m = best_splitpoint_index (beat_length, subdivide);
   bool split = subdivide && (m & at_beat); m = m & ~at_beat;
-  splits[LEFT].infos_ = infos_.slice (0, m);
-  splits[RIGHT].infos_ = infos_.slice (m, infos_.size ());
+  splits[LEFT].infos_ = std::vector<Beaming_info> (infos_.begin (),
+                                                  infos_.begin () + m);
+  splits[RIGHT].infos_ = std::vector<Beaming_info> (infos_.begin () + m,
+                                                   infos_.end ());
 
   Direction d = LEFT;
 
index 23d735ec9fdda173ae8da5b71d860861d7ab140d..02bb58267bc26785e1499f7e45aea9f7e5f5b9cd 100644 (file)
@@ -246,8 +246,10 @@ New_fingering_engraver::position_scripts (SCM orientations,
   else if (up_p && down_p)
     {
       int center = scripts->size () / 2;
-      down.concat (scripts->slice (0, center));
-      up.concat (scripts->slice (center, scripts->size ()));
+      down.concat (std::vector<Finger_tuple> (scripts->begin (),
+                                             scripts->begin () + center));
+      up.concat (std::vector<Finger_tuple> (scripts->begin () + center,
+                                           scripts->end ()));
     }
   else if (up_p)
     {