[vector] Add initializer_list constructor & tests
diff --git a/src/hb-vector.hh b/src/hb-vector.hh
index 44c174d..d3a5dff 100644
--- a/src/hb-vector.hh
+++ b/src/hb-vector.hh
@@ -31,6 +31,8 @@
#include "hb-array.hh"
#include "hb-null.hh"
+#include <initializer_list>
+
template <typename Type>
struct hb_vector_t
@@ -39,9 +41,14 @@
static constexpr unsigned item_size = hb_static_size (Type);
hb_vector_t () { init (); }
- hb_vector_t (const hb_vector_t &o)
+ hb_vector_t (std::initializer_list<Type> l) : hb_vector_t ()
{
- init ();
+ alloc (l.size ());
+ for (auto&& i : l)
+ push (i);
+ }
+ hb_vector_t (const hb_vector_t &o) : hb_vector_t ()
+ {
alloc (o.length);
hb_copy (o, *this);
}
@@ -302,6 +309,10 @@
template <typename Type>
struct hb_sorted_vector_t : hb_vector_t<Type>
{
+ hb_sorted_vector_t () : hb_vector_t<Type> () {}
+ hb_sorted_vector_t (std::initializer_list<Type> l) : hb_vector_t<Type> (l) {}
+ hb_sorted_vector_t (hb_sorted_vector_t& o) : hb_vector_t<Type> (o) {}
+
hb_sorted_array_t< Type> as_array () { return hb_sorted_array (this->arrayZ, this->length); }
hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->length); }
diff --git a/src/test-algs.cc b/src/test-algs.cc
index f8b8ff6..0f6b1fb 100644
--- a/src/test-algs.cc
+++ b/src/test-algs.cc
@@ -91,5 +91,25 @@
assert (++hb_inc (x) == 3);
assert (x == 3);
+ {
+ hb_vector_t<int> v1 {1, 2, 3};
+ hb_vector_t<int> v2 {4, 5};
+ hb_swap (v1, v2);
+ assert (v1.length == 2);
+ assert (v1[0] == 4);
+ assert (v2.length == 3);
+ assert (v2[2] == 3);
+ }
+
+ {
+ hb_sorted_vector_t<int> v1 {1, 2, 3};
+ hb_sorted_vector_t<int> v2 {4, 5};
+ hb_swap (v1, v2);
+ assert (v1.length == 2);
+ assert (v1[0] == 4);
+ assert (v2.length == 3);
+ assert (v2[2] == 3);
+ }
+
return 0;
}