From 570473a345a73ab05ea8e8acf88cfba9b90a81a4 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 27 Dec 2018 13:29:51 -0500 Subject: [PATCH] [iter] Make hb_sorted_array_t work as iter Ugly, but does the job. --- src/hb-array.hh | 6 ++++-- src/hb-iter.hh | 18 ++++++++++++++++++ src/test-iter.cc | 2 ++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/hb-array.hh b/src/hb-array.hh index 52b775e95..7dd02cdae 100644 --- a/src/hb-array.hh +++ b/src/hb-array.hh @@ -194,9 +194,11 @@ enum hb_bfind_not_found_t template struct hb_sorted_array_t : hb_sorted_iter_t, Type>, - hb_array_t, - hb_iter_mixin_t, Type> + hb_array_t { + typedef hb_sorted_iter_t, Type> iter_base_t; + HB_ITER_USING (iter_base_t); + hb_sorted_array_t () : hb_array_t () {} hb_sorted_array_t (const hb_array_t &o) : hb_array_t (o) {} hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t (array_, length_) {} diff --git a/src/hb-iter.hh b/src/hb-iter.hh index db2ddc1e3..6d4adca27 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -80,6 +80,24 @@ struct hb_iter_t void operator = (const hb_iter_t &o HB_UNUSED) {} }; +#define HB_ITER_USING(Name) \ + using Name::iter; \ + using Name::operator bool; \ + using Name::len; \ + using Name::operator ->; \ + using Name::operator *; \ + using Name::operator []; \ + using Name::operator +=; \ + using Name::operator ++; \ + using Name::operator -=; \ + using Name::operator --; \ + using Name::operator +; \ + using Name::operator -; \ + using Name::is_random_access; \ + static_assert (true, "") + + + /* Base class for sorted iterators. Does not enforce anything. * Just for class taxonomy and requirements. */ template diff --git a/src/test-iter.cc b/src/test-iter.cc index 3fdf4dfa3..2e8c408dc 100644 --- a/src/test-iter.cc +++ b/src/test-iter.cc @@ -109,6 +109,8 @@ main (int argc, char **argv) test_iterable (v); hb_set_t st; test_iterable (st); + hb_sorted_array_t sa; + test_iterable (sa); return 0; }