From 492af0f1bf1d7198b474fda2faca451908af267f Mon Sep 17 00:00:00 2001 From: rsheeter Date: Wed, 8 May 2019 12:47:18 -0700 Subject: [PATCH] [map] add keys() --- src/hb-map.hh | 9 ++++++++- src/test-iter.cc | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/hb-map.hh b/src/hb-map.hh index 5a4f5c3..4a1f75e 100644 --- a/src/hb-map.hh +++ b/src/hb-map.hh @@ -212,11 +212,18 @@ struct hb_hashmap_t */ auto iter() const HB_AUTO_RETURN ( - + hb_array_t (items, mask + 1) + + hb_array (items, mask + 1) | hb_filter (&item_t::is_real) | hb_map (&item_t::get_pair) ) + auto keys() const HB_AUTO_RETURN + ( + + iter() + | hb_map (&hb_pair_t::first) + ) + // | hb_map ([&] (item_t i) { return i.key; }) + protected: unsigned int bucket_for (K key) const diff --git a/src/test-iter.cc b/src/test-iter.cc index 7e77320..63851a3 100644 --- a/src/test-iter.cc +++ b/src/test-iter.cc @@ -210,6 +210,10 @@ main (int argc, char **argv) + hb_iter (m) | hb_map ([] (map_pair_t p) { return p.first * p.second; }); + using map_key_t = decltype (*m.keys()); + + hb_iter (m.keys ()) + | hb_filter ([] (map_key_t k) { return k < 42; }); + unsigned int temp1 = 10; unsigned int temp2 = 0; hb_map_t *result = -- 2.7.4