forked from boostorg/unordered
Implement an alternative erase function that doesn't return an iterator.
Ref #3693 [SVN r58403]
This commit is contained in:
@@ -532,7 +532,8 @@ namespace boost { namespace unordered_detail {
|
||||
|
||||
void clear();
|
||||
std::size_t erase_key(key_type const& k);
|
||||
iterator_base erase(iterator_base r);
|
||||
iterator_base erase_return_iterator(iterator_base r);
|
||||
void erase(iterator_base r);
|
||||
std::size_t erase_group(node_ptr* it, bucket_ptr bucket);
|
||||
iterator_base erase_range(iterator_base r1, iterator_base r2);
|
||||
|
||||
|
||||
@@ -652,10 +652,20 @@ namespace boost { namespace unordered_detail {
|
||||
return *it ? this->erase_group(it, bucket) : 0;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void hash_table<T>::erase(iterator_base r)
|
||||
{
|
||||
BOOST_ASSERT(r.node_);
|
||||
--this->size_;
|
||||
node::unlink_node(*r.bucket_, r.node_);
|
||||
this->delete_node(r.node_);
|
||||
// r has been invalidated but its bucket is still valid
|
||||
this->recompute_begin_bucket(r.bucket_);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
BOOST_DEDUCED_TYPENAME T::iterator_base
|
||||
hash_table<T>::erase(iterator_base r)
|
||||
hash_table<T>::erase_return_iterator(iterator_base r)
|
||||
{
|
||||
BOOST_ASSERT(r.node_);
|
||||
iterator_base next = r;
|
||||
|
||||
@@ -355,7 +355,7 @@ namespace boost
|
||||
|
||||
iterator erase(const_iterator position)
|
||||
{
|
||||
return iterator(table_.erase(get(position)));
|
||||
return iterator(table_.erase_return_iterator(get(position)));
|
||||
}
|
||||
|
||||
size_type erase(const key_type& k)
|
||||
@@ -368,6 +368,11 @@ namespace boost
|
||||
return iterator(table_.erase_range(get(first), get(last)));
|
||||
}
|
||||
|
||||
void erase_return_void(const_iterator position)
|
||||
{
|
||||
table_.erase(get(position));
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
table_.clear();
|
||||
@@ -868,7 +873,7 @@ namespace boost
|
||||
|
||||
iterator erase(const_iterator position)
|
||||
{
|
||||
return iterator(table_.erase(get(position)));
|
||||
return iterator(table_.erase_return_iterator(get(position)));
|
||||
}
|
||||
|
||||
size_type erase(const key_type& k)
|
||||
@@ -881,6 +886,11 @@ namespace boost
|
||||
return iterator(table_.erase_range(get(first), get(last)));
|
||||
}
|
||||
|
||||
void erase_return_void(const_iterator position)
|
||||
{
|
||||
table_.erase(get(position));
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
table_.clear();
|
||||
|
||||
@@ -348,7 +348,7 @@ namespace boost
|
||||
|
||||
iterator erase(const_iterator position)
|
||||
{
|
||||
return iterator(table_.erase(get(position)));
|
||||
return iterator(table_.erase_return_iterator(get(position)));
|
||||
}
|
||||
|
||||
size_type erase(const key_type& k)
|
||||
@@ -361,6 +361,11 @@ namespace boost
|
||||
return iterator(table_.erase_range(get(first), get(last)));
|
||||
}
|
||||
|
||||
void erase_return_void(const_iterator position)
|
||||
{
|
||||
table_.erase(get(position));
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
table_.clear();
|
||||
@@ -822,7 +827,7 @@ namespace boost
|
||||
|
||||
iterator erase(const_iterator position)
|
||||
{
|
||||
return iterator(table_.erase(get(position)));
|
||||
return iterator(table_.erase_return_iterator(get(position)));
|
||||
}
|
||||
|
||||
size_type erase(const key_type& k)
|
||||
@@ -835,6 +840,11 @@ namespace boost
|
||||
return iterator(table_.erase_range(get(first), get(last)));
|
||||
}
|
||||
|
||||
void erase_return_void(const_iterator position)
|
||||
{
|
||||
table_.erase(get(position));
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
table_.clear();
|
||||
|
||||
Reference in New Issue
Block a user