[iter] Accept pointer in hb_map()
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 8 May 2019 17:56:09 +0000 (10:56 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 8 May 2019 17:56:09 +0000 (10:56 -0700)
src/hb-iter.hh
src/test-iter.cc

index 1a3e2ab..5a76c95 100644 (file)
@@ -324,11 +324,11 @@ template <typename Iter, typename Proj,
         hb_requires (hb_is_iterator (Iter))>
 struct hb_map_iter_t :
   hb_iter_t<hb_map_iter_t<Iter, Proj>,
-           decltype (hb_declval (Proj) (hb_declval (typename Iter::item_t)))>
+           decltype (hb_get (hb_declval (Proj), *hb_declval (Iter)))>
 {
   hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
 
-  typedef decltype (hb_declval (Proj) (hb_declval (typename Iter::item_t))) __item_t__;
+  typedef decltype (hb_get (hb_declval (Proj), *hb_declval (Iter))) __item_t__;
   static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
   __item_t__ __item__ () const { return hb_get (f.get (), *it); }
   __item_t__ __item_at__ (unsigned i) const { return hb_get (f.get (), it[i]); }
index f29166f..1e721ae 100644 (file)
@@ -177,9 +177,14 @@ main (int argc, char **argv)
   hb_array_t<hb_vector_t<int>> pa;
   pa->as_array ();
 
+  hb_map_t m;
+
   + hb_iter (src)
-  | hb_map (hb_identity)
+  | hb_map (m)
+  | hb_map (&m)
   | hb_filter ()
+  | hb_filter (st)
+  | hb_filter (&st)
   | hb_filter (hb_bool)
   | hb_filter (hb_bool, hb_identity)
   | hb_sink (st)