From f6a077e102ed6704422481fcc49ff73875d54ed9 Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 4 Jan 2022 11:37:39 -0800 Subject: [PATCH 1/2] Add transparent test support for multiset's `extract()` --- test/unordered/transparent_tests.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/unordered/transparent_tests.cpp b/test/unordered/transparent_tests.cpp index 9f7a129c..59fb48d7 100644 --- a/test/unordered/transparent_tests.cpp +++ b/test/unordered/transparent_tests.cpp @@ -1461,6 +1461,26 @@ transparent_unordered_set::node_type set_extract_const_overload_compile_test() return set.extract(c); } +transparent_unordered_multiset::node_type +multiset_extract_overload_compile_test() +{ + convertible_to_iterator c; + transparent_unordered_multiset set; + transparent_unordered_multiset::iterator pos = set.begin(); + pos = c; + return set.extract(c); +} + +transparent_unordered_multiset::node_type +multiset_extract_const_overload_compile_test() +{ + convertible_to_const_iterator c; + transparent_unordered_multiset set; + transparent_unordered_multiset::const_iterator pos = set.begin(); + pos = c; + return set.extract(c); +} + template void test_set_transparent_extract() { typedef typename UnorderedSet::node_type node_type; @@ -1735,6 +1755,7 @@ void test_unordered_multiset() test_set_transparent_find(); test_set_transparent_erase(); test_set_transparent_equal_range(); + test_set_transparent_extract(); } { @@ -1746,6 +1767,7 @@ void test_unordered_multiset() test_set_non_transparent_find(); test_set_non_transparent_erase(); test_set_non_transparent_equal_range(); + test_set_non_transparent_extract(); } { @@ -1758,6 +1780,7 @@ void test_unordered_multiset() test_set_non_transparent_find(); test_set_non_transparent_erase(); test_set_non_transparent_equal_range(); + test_set_non_transparent_extract(); } { @@ -1770,6 +1793,7 @@ void test_unordered_multiset() test_set_non_transparent_find(); test_set_non_transparent_erase(); test_set_non_transparent_equal_range(); + test_set_non_transparent_extract(); } } From 1c459e6ee611e72ef8cd703dc65af7007ca9f87f Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 4 Jan 2022 11:37:51 -0800 Subject: [PATCH 2/2] Implement heterogeneous `extract()` for multiset --- include/boost/unordered/unordered_set.hpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/boost/unordered/unordered_set.hpp b/include/boost/unordered/unordered_set.hpp index bd191e30..c66fef7e 100644 --- a/include/boost/unordered/unordered_set.hpp +++ b/include/boost/unordered/unordered_set.hpp @@ -1015,6 +1015,15 @@ namespace boost { return node_type(table_.extract_by_key(k), table_.node_alloc()); } + template + typename boost::enable_if_c< + detail::transparent_non_iterable::value, + node_type>::type + extract(const Key& k) + { + return node_type(table_.extract_by_key_impl(k), table_.node_alloc()); + } + iterator insert(BOOST_RV_REF(node_type) np) { return table_.move_insert_node_type_equiv(np);