forked from boostorg/unordered
Merge pull request #70 from cmazakas/multiset-heterogeneous-erase
Multiset Heterogeneous `erase()`
This commit is contained in:
@ -1016,6 +1016,16 @@ namespace boost {
|
|||||||
|
|
||||||
iterator erase(const_iterator);
|
iterator erase(const_iterator);
|
||||||
size_type erase(const key_type&);
|
size_type erase(const key_type&);
|
||||||
|
|
||||||
|
template <class Key>
|
||||||
|
typename boost::enable_if_c<
|
||||||
|
detail::transparent_non_iterable<Key, unordered_multiset>::value,
|
||||||
|
size_type>::type
|
||||||
|
erase(const Key& k)
|
||||||
|
{
|
||||||
|
return table_.erase_key_equiv_impl(this->key_eq(), k);
|
||||||
|
}
|
||||||
|
|
||||||
iterator erase(const_iterator, const_iterator);
|
iterator erase(const_iterator, const_iterator);
|
||||||
BOOST_UNORDERED_DEPRECATED("Use erase instead")
|
BOOST_UNORDERED_DEPRECATED("Use erase instead")
|
||||||
void quick_erase(const_iterator it) { erase(it); }
|
void quick_erase(const_iterator it) { erase(it); }
|
||||||
|
@ -1070,9 +1070,14 @@ template <class UnorderedMap> void test_map_transparent_erase()
|
|||||||
BOOST_TEST_EQ(map.size(), 2);
|
BOOST_TEST_EQ(map.size(), 2);
|
||||||
BOOST_TEST(map.find(0) == map.end());
|
BOOST_TEST(map.find(0) == map.end());
|
||||||
|
|
||||||
|
num_erased = map.erase(1);
|
||||||
|
BOOST_TEST_EQ(num_erased, 1);
|
||||||
|
BOOST_TEST_EQ(map.size(), 1);
|
||||||
|
BOOST_TEST(map.find(1) == map.end());
|
||||||
|
|
||||||
num_erased = map.erase(1337);
|
num_erased = map.erase(1337);
|
||||||
BOOST_TEST_EQ(num_erased, 0);
|
BOOST_TEST_EQ(num_erased, 0);
|
||||||
BOOST_TEST_EQ(map.size(), 2);
|
BOOST_TEST_EQ(map.size(), 1);
|
||||||
|
|
||||||
BOOST_TEST_EQ(key::count_, expected_key_count);
|
BOOST_TEST_EQ(key::count_, expected_key_count);
|
||||||
}
|
}
|
||||||
@ -1114,16 +1119,29 @@ template <class UnorderedMap> void test_map_non_transparent_erase()
|
|||||||
|
|
||||||
BOOST_TEST_EQ(key::count_, key_count);
|
BOOST_TEST_EQ(key::count_, key_count);
|
||||||
|
|
||||||
|
num_erased = map.erase(1);
|
||||||
|
++key_count;
|
||||||
|
BOOST_TEST_EQ(num_erased, 1);
|
||||||
|
BOOST_TEST_EQ(map.size(), 1);
|
||||||
|
|
||||||
|
BOOST_TEST(map.find(1) == map.end());
|
||||||
|
++key_count;
|
||||||
|
|
||||||
num_erased = map.erase(1337);
|
num_erased = map.erase(1337);
|
||||||
++key_count;
|
++key_count;
|
||||||
BOOST_TEST_EQ(num_erased, 0);
|
BOOST_TEST_EQ(num_erased, 0);
|
||||||
BOOST_TEST_EQ(map.size(), 2);
|
BOOST_TEST_EQ(map.size(), 1);
|
||||||
|
|
||||||
BOOST_TEST_EQ(key::count_, key_count);
|
BOOST_TEST_EQ(key::count_, key_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef boost::unordered_set<int, transparent_hasher, transparent_key_equal>
|
typedef boost::unordered_set<int, transparent_hasher, transparent_key_equal>
|
||||||
transparent_unordered_set;
|
transparent_unordered_set;
|
||||||
|
|
||||||
|
typedef boost::unordered_multiset<int, transparent_hasher,
|
||||||
|
transparent_key_equal>
|
||||||
|
transparent_unordered_multiset;
|
||||||
|
|
||||||
transparent_unordered_set::iterator set_erase_overload_compile_test()
|
transparent_unordered_set::iterator set_erase_overload_compile_test()
|
||||||
{
|
{
|
||||||
convertible_to_iterator<transparent_unordered_set> c;
|
convertible_to_iterator<transparent_unordered_set> c;
|
||||||
@ -1143,6 +1161,25 @@ set_erase_const_overload_compile_test()
|
|||||||
return set.erase(c);
|
return set.erase(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
transparent_unordered_multiset::iterator multiset_erase_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.erase(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
transparent_unordered_multiset::const_iterator
|
||||||
|
multiset_erase_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.erase(c);
|
||||||
|
}
|
||||||
|
|
||||||
template <class UnorderedSet> void test_set_transparent_erase()
|
template <class UnorderedSet> void test_set_transparent_erase()
|
||||||
{
|
{
|
||||||
count_reset();
|
count_reset();
|
||||||
@ -1173,9 +1210,14 @@ template <class UnorderedSet> void test_set_transparent_erase()
|
|||||||
BOOST_TEST_EQ(set.size(), 2);
|
BOOST_TEST_EQ(set.size(), 2);
|
||||||
BOOST_TEST(set.find(0) == set.end());
|
BOOST_TEST(set.find(0) == set.end());
|
||||||
|
|
||||||
|
num_erased = set.erase(1);
|
||||||
|
BOOST_TEST_EQ(num_erased, 1);
|
||||||
|
BOOST_TEST_EQ(set.size(), 1);
|
||||||
|
BOOST_TEST(set.find(1) == set.end());
|
||||||
|
|
||||||
num_erased = set.erase(1337);
|
num_erased = set.erase(1337);
|
||||||
BOOST_TEST_EQ(num_erased, 0);
|
BOOST_TEST_EQ(num_erased, 0);
|
||||||
BOOST_TEST_EQ(set.size(), 2);
|
BOOST_TEST_EQ(set.size(), 1);
|
||||||
|
|
||||||
BOOST_TEST_EQ(key::count_, expected_key_count);
|
BOOST_TEST_EQ(key::count_, expected_key_count);
|
||||||
}
|
}
|
||||||
@ -1217,10 +1259,19 @@ template <class UnorderedSet> void test_set_non_transparent_erase()
|
|||||||
|
|
||||||
BOOST_TEST_EQ(key::count_, key_count);
|
BOOST_TEST_EQ(key::count_, key_count);
|
||||||
|
|
||||||
|
num_erased = set.erase(1);
|
||||||
|
++key_count;
|
||||||
|
BOOST_TEST_EQ(num_erased, 1);
|
||||||
|
BOOST_TEST_EQ(set.size(), 1);
|
||||||
|
|
||||||
|
BOOST_TEST(set.find(1) == set.end());
|
||||||
|
++key_count;
|
||||||
|
|
||||||
num_erased = set.erase(1337);
|
num_erased = set.erase(1337);
|
||||||
++key_count;
|
++key_count;
|
||||||
BOOST_TEST_EQ(num_erased, 0);
|
BOOST_TEST_EQ(num_erased, 0);
|
||||||
BOOST_TEST_EQ(set.size(), 2);
|
BOOST_TEST_EQ(set.size(), 1);
|
||||||
|
|
||||||
BOOST_TEST_EQ(key::count_, key_count);
|
BOOST_TEST_EQ(key::count_, key_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1489,6 +1540,7 @@ void test_unordered_multiset()
|
|||||||
unordered_set;
|
unordered_set;
|
||||||
|
|
||||||
test_set_transparent_find<unordered_set>();
|
test_set_transparent_find<unordered_set>();
|
||||||
|
test_set_transparent_erase<unordered_set>();
|
||||||
test_set_transparent_equal_range<unordered_set>();
|
test_set_transparent_equal_range<unordered_set>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1498,6 +1550,7 @@ void test_unordered_multiset()
|
|||||||
typedef boost::unordered_multiset<key, hasher, key_equal> unordered_set;
|
typedef boost::unordered_multiset<key, hasher, key_equal> unordered_set;
|
||||||
|
|
||||||
test_set_non_transparent_find<unordered_set>();
|
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_equal_range<unordered_set>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1508,6 +1561,7 @@ void test_unordered_multiset()
|
|||||||
unordered_set;
|
unordered_set;
|
||||||
|
|
||||||
test_set_non_transparent_find<unordered_set>();
|
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_equal_range<unordered_set>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1518,6 +1572,7 @@ void test_unordered_multiset()
|
|||||||
unordered_set;
|
unordered_set;
|
||||||
|
|
||||||
test_set_non_transparent_find<unordered_set>();
|
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_equal_range<unordered_set>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user