From: Jon Bailey Date: Mon, 12 May 2025 20:19:48 +0000 (+0100) Subject: common: Add iterator traits to mini_flat_map and bitset_set iterator X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8f1fa0d1307d7a60844de0ca33628e0c6997468e;p=ceph.git common: Add iterator traits to mini_flat_map and bitset_set iterator Add iterator traits to mini_flat_map and bitset_set iterator to allow std algorithms to be able to perform operations using the mini_flat_map iterator Signed-off-by: Jon Bailey --- diff --git a/src/common/bitset_set.h b/src/common/bitset_set.h index d6d0214495983..182d635b55996 100644 --- a/src/common/bitset_set.h +++ b/src/common/bitset_set.h @@ -39,7 +39,11 @@ class bitset_set { KeyT pos; public: + using value_type = const KeyT; using difference_type = std::int64_t; + using pointer = const value_type *; + using reference = const value_type &; + using iterator_category = std::forward_iterator_tag; const_iterator() : set(nullptr), pos(0) { } diff --git a/src/common/mini_flat_map.h b/src/common/mini_flat_map.h index 46abda5138729..6d1cea34c15d7 100644 --- a/src/common/mini_flat_map.h +++ b/src/common/mini_flat_map.h @@ -50,14 +50,22 @@ class mini_flat_map { template class _iterator { friend class mini_flat_map; - using mini_flat_map_p = std::conditional_t; + + public: + // types required by std::iterator_traits using value_type = std::conditional_t, std::pair>; - + using difference_type = std::ptrdiff_t; + using pointer = const value_type *; + using reference = const value_type &; + using iterator_category = std::forward_iterator_tag; + + private: + using mini_flat_map_p = std::conditional_t; mini_flat_map_p map; std::optional value; KeyT key; @@ -73,8 +81,6 @@ class mini_flat_map { } public: - using difference_type = std::ptrdiff_t; - _iterator(mini_flat_map_p map) : map(map), key(0) { progress(); }