diff --git a/src/hb-iter.hh b/src/hb-iter.hh index f2d81e9e5..b8d2dd5c3 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -664,7 +664,7 @@ struct hb_iota_iter_t : template auto - inc (S s, hb_priority<1>) + inc (hb_type_identity s, hb_priority<1>) -> hb_void_t (s), hb_declval ()))> { v = hb_invoke (hb_forward (s), v); } @@ -728,7 +728,7 @@ struct } HB_FUNCOBJ (hb_repeat); -/* hb_enumerate */ +/* hb_enumerate()/hb_take() */ struct { @@ -739,6 +739,14 @@ struct ( hb_zip (hb_iota (start), it) ) } HB_FUNCOBJ (hb_enumerate); +struct +{ HB_PARTIALIZE(2); + template + auto operator () (Iterable&& it, unsigned count) const HB_AUTO_RETURN + ( hb_zip (hb_range (count), it) | hb_map (hb_second) ) +} +HB_FUNCOBJ (hb_take); /* hb_sink() */ diff --git a/src/test-iter.cc b/src/test-iter.cc index 0225d976a..7ce6d8fde 100644 --- a/src/test-iter.cc +++ b/src/test-iter.cc @@ -272,6 +272,7 @@ main (int argc, char **argv) hb_repeat (7u); hb_repeat (nullptr); hb_repeat (vl); + assert ((hb_range (10) | hb_take (3)).len () == 3); assert (hb_range (9).len () == 9); assert (hb_range (2, 9).len () == 7); assert (hb_range (2, 9, 3).len () == 3);