From ee75e716c1fec110e9ee2d30be9db14b75515404 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 1 Nov 2021 20:18:49 -0600 Subject: [PATCH] [vector] Add initializer from iterable --- src/hb-vector.hh | 6 ++++++ src/test-algs.cc | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/hb-vector.hh b/src/hb-vector.hh index af07c28be..92c74dc13 100644 --- a/src/hb-vector.hh +++ b/src/hb-vector.hh @@ -47,6 +47,12 @@ struct hb_vector_t for (auto&& i : l) push (i); } + template + hb_vector_t (const Iterable &o) : hb_vector_t () + { + hb_copy (o, *this); + } hb_vector_t (const hb_vector_t &o) : hb_vector_t () { alloc (o.length); diff --git a/src/test-algs.cc b/src/test-algs.cc index 0f6b1fbd0..fd69b51c3 100644 --- a/src/test-algs.cc +++ b/src/test-algs.cc @@ -26,6 +26,7 @@ #include "hb.hh" #include "hb-algs.hh" +#include "hb-set.hh" static char * @@ -91,6 +92,35 @@ main (int argc, char **argv) assert (++hb_inc (x) == 3); assert (x == 3); + /* Test initializing vector from iterable. */ + { + hb_set_t s; + + s.add (18); + s.add (12); + + hb_vector_t v (s); + + assert (v.length == 2); + assert (v[0] == 12); + assert (v[1] == 18); + } + + /* Test initializing vector from iterator. */ + { + hb_set_t s; + + s.add (18); + s.add (12); + + hb_vector_t v (hb_iter (s)); + + assert (v.length == 2); + assert (v[0] == 12); + assert (v[1] == 18); + } + + /* Test initializing vector from initializer list and swapping. */ { hb_vector_t v1 {1, 2, 3}; hb_vector_t v2 {4, 5}; @@ -101,6 +131,7 @@ main (int argc, char **argv) assert (v2[2] == 3); } + /* Test initializing sorted-vector from initializer list and swapping. */ { hb_sorted_vector_t v1 {1, 2, 3}; hb_sorted_vector_t v2 {4, 5};