[iter] Add hb_is_random_access_iterator()
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 8 Jan 2019 20:53:02 +0000 (12:53 -0800)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 21 Jan 2019 01:12:12 +0000 (20:12 -0500)
src/hb-iter.hh
src/test-iter.cc

index a3987b3..c9b5d4c 100644 (file)
@@ -159,7 +159,7 @@ struct hb_is_iterable { enum { value = _hb_is_iterable<T, hb_true_t>::value }; }
 #define hb_is_iterable(Iterable) hb_is_iterable<Iterable>::value
 
 
-/* hb_is_iterator() / hb_is_sorted_iterator() */
+/* hb_is_iterator() / hb_is_random_access_iterator() / hb_is_sorted_iterator() */
 
 template <typename Iter>
 struct _hb_is_iterator_of
@@ -177,9 +177,13 @@ struct hb_is_iterator_of { enum {
 #define hb_is_iterator_of(Iter, Item) hb_is_iterator_of<Iter, Item>::value
 #define hb_is_iterator(Iter) hb_is_iterator_of (Iter, typename Iter::item_t)
 
+#define hb_is_random_access_iterator_of(Iter, Item) \
+  hb_is_iterator_of (Iter, Item) && Iter::is_random_access_iterator
+#define hb_is_random_access_iterator(Iter) \
+  hb_is_random_access_iterator_of (Iter, typename Iter::item_t)
+
 #define hb_is_sorted_iterator_of(Iter, Item) \
-  hb_is_iterator_of (Iter, Item) && \
-  Iter::is_sorted_iterator
+  hb_is_iterator_of (Iter, Item) && Iter::is_sorted_iterator
 #define hb_is_sorted_iterator(Iter) \
   hb_is_sorted_iterator_of (Iter, typename Iter::item_t)
 
index d508e24..5836551 100644 (file)
@@ -105,6 +105,8 @@ main (int argc, char **argv)
   array_iter_t<const int> s2 (v); /* Implicit conversion from vector. */
   array_iter_t<int> t (dst);
 
+  assert (hb_is_random_access_iterator (array_iter_t<int>));
+
   some_array_t<const int> a (src);
 
   s2 = s;