Expand calls to erase implementation

Doesn't work as well as the previous changes.
This commit is contained in:
Daniel James
2017-04-23 10:09:18 +01:00
parent da835e88b8
commit 25b0b66e52
3 changed files with 56 additions and 42 deletions
+22 -4
View File
@@ -53,6 +53,7 @@ template <class T, class H, class P, class A> class unordered_set
typedef boost::unordered::detail::set<A, T, H, P> types;
typedef typename types::value_allocator_traits value_allocator_traits;
typedef typename types::table table;
typedef typename table::node_pointer node_pointer;
typedef typename table::link_pointer link_pointer;
public:
@@ -563,6 +564,7 @@ template <class T, class H, class P, class A> class unordered_multiset
typedef boost::unordered::detail::multiset<A, T, H, P> types;
typedef typename types::value_allocator_traits value_allocator_traits;
typedef typename types::table table;
typedef typename table::node_pointer node_pointer;
typedef typename table::link_pointer link_pointer;
public:
@@ -1226,7 +1228,11 @@ template <class T, class H, class P, class A>
typename unordered_set<T, H, P, A>::iterator unordered_set<T, H, P, A>::erase(
const_iterator position)
{
return table_.erase(position);
node_pointer node = table::get_node(position);
BOOST_ASSERT(node);
node_pointer next = table::node_algo::next_node(node);
table_.erase_nodes(node, next);
return iterator(next);
}
template <class T, class H, class P, class A>
@@ -1240,7 +1246,11 @@ template <class T, class H, class P, class A>
typename unordered_set<T, H, P, A>::iterator unordered_set<T, H, P, A>::erase(
const_iterator first, const_iterator last)
{
return table_.erase_range(first, last);
node_pointer last_node = table::get_node(last);
if (first == last)
return iterator(last_node);
table_.erase_nodes(table::get_node(first), last_node);
return iterator(last_node);
}
template <class T, class H, class P, class A>
@@ -1608,7 +1618,11 @@ template <class T, class H, class P, class A>
typename unordered_multiset<T, H, P, A>::iterator
unordered_multiset<T, H, P, A>::erase(const_iterator position)
{
return table_.erase(position);
node_pointer node = table::get_node(position);
BOOST_ASSERT(node);
node_pointer next = table::node_algo::next_node(node);
table_.erase_nodes(node, next);
return iterator(next);
}
template <class T, class H, class P, class A>
@@ -1622,7 +1636,11 @@ template <class T, class H, class P, class A>
typename unordered_multiset<T, H, P, A>::iterator
unordered_multiset<T, H, P, A>::erase(const_iterator first, const_iterator last)
{
return table_.erase_range(first, last);
node_pointer last_node = table::get_node(last);
if (first == last)
return iterator(last_node);
table_.erase_nodes(table::get_node(first), last_node);
return iterator(last_node);
}
template <class T, class H, class P, class A>