Merge pull request #74 from cmazakas/multiset-heterogeneous-extract

Multiset Heterogeneous `extract()`
This commit is contained in:
Peter Dimov
2022-01-05 20:47:51 +02:00
committed by GitHub
2 changed files with 33 additions and 0 deletions

View File

@ -1015,6 +1015,15 @@ namespace boost {
return node_type(table_.extract_by_key(k), table_.node_alloc());
}
template <class Key>
typename boost::enable_if_c<
detail::transparent_non_iterable<Key, unordered_multiset>::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);

View File

@ -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<transparent_unordered_multiset> 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<transparent_unordered_multiset> c;
transparent_unordered_multiset set;
transparent_unordered_multiset::const_iterator pos = set.begin();
pos = c;
return set.extract(c);
}
template <class UnorderedSet> void test_set_transparent_extract()
{
typedef typename UnorderedSet::node_type node_type;
@ -1735,6 +1755,7 @@ void test_unordered_multiset()
test_set_transparent_find<unordered_set>();
test_set_transparent_erase<unordered_set>();
test_set_transparent_equal_range<unordered_set>();
test_set_transparent_extract<unordered_set>();
}
{
@ -1746,6 +1767,7 @@ void test_unordered_multiset()
test_set_non_transparent_find<unordered_set>();
test_set_non_transparent_erase<unordered_set>();
test_set_non_transparent_equal_range<unordered_set>();
test_set_non_transparent_extract<unordered_set>();
}
{
@ -1758,6 +1780,7 @@ void test_unordered_multiset()
test_set_non_transparent_find<unordered_set>();
test_set_non_transparent_erase<unordered_set>();
test_set_non_transparent_equal_range<unordered_set>();
test_set_non_transparent_extract<unordered_set>();
}
{
@ -1770,6 +1793,7 @@ void test_unordered_multiset()
test_set_non_transparent_find<unordered_set>();
test_set_non_transparent_erase<unordered_set>();
test_set_non_transparent_equal_range<unordered_set>();
test_set_non_transparent_extract<unordered_set>();
}
}