* stepmake/stepmake/test*: Unit test support.
+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.
template<class T>
class Array
{
-protected:
+public:
+
/// maximum length of array.
vsize max_;
public:
/* std::vector interface */
+ typedef T* iterator;
+ typedef T const* const_iterator;
+
Array ()
{
array_ = 0;
max_ = size_ = src.size_;
}
+ Array (const_iterator begin, const_iterator end);
+
T const &back () const
{
return (*this)[size_ - 1];
return array_;
}
- typedef T* iterator;
+ T const*
+ data () const
+ {
+ return array_;
+ }
iterator
begin ()
return data ();
}
- iterator const
+ const_iterator
begin () const
{
return data ();
return data () + size_;
}
- iterator const
+ const_iterator
end () const
{
return data () + size_;
void clear ()
{
- resize (0);
+ //resize (0);
+ size_ = 0;
}
/* std::vector uses unchecked variant for [] */
resize (size_ + src.size_);
arrcpy (array_ + s, src.array_, src.size_);
}
- Array<T> slice (vsize lower, vsize upper) const;
void reverse ();
};
}
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>
class Link_array : private Array<void *>
{
- Link_array (Array<void *> v)
+ Link_array (Array<void *> const &v)
:Array<void *> (v)
{
}
: Array<void *> (src)
{
}
+
/// access element
T *elem (int i) const
{
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)
{
{
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)
{
::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)
{
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;
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)
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;
}
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;
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)
{