typedef _GLIBCXX_STD_D::unordered_set<_Value, _Hash,
_Pred, _Alloc> _Base;
typedef __gnu_debug::_Safe_sequence<unordered_set> _Safe_base;
+ typedef typename _Base::const_iterator _Base_const_iterator;
+ typedef typename _Base::iterator _Base_iterator;
+ typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::key_type key_type;
typedef typename _Base::value_type value_type;
- typedef __gnu_debug::_Safe_iterator<typename _Base::iterator,
+ typedef __gnu_debug::_Safe_iterator<_Base_iterator,
unordered_set> iterator;
- typedef __gnu_debug::_Safe_iterator<typename _Base::const_iterator,
+ typedef __gnu_debug::_Safe_iterator<_Base_const_iterator,
unordered_set> const_iterator;
explicit
std::pair<iterator, bool>
insert(const value_type& __obj)
{
- typedef std::pair<typename _Base::iterator, bool> __pair_type;
+ typedef std::pair<_Base_iterator, bool> __pair_type;
__pair_type __res = _Base::insert(__obj);
return std::make_pair(iterator(__res.first, this), __res.second);
}
iterator
insert(const_iterator, const value_type& __obj)
{
- typedef std::pair<typename _Base::iterator, bool> __pair_type;
+ typedef std::pair<_Base_iterator, bool> __pair_type;
__pair_type __res = _Base::insert(__obj);
return iterator(__res.first, this);
}
std::pair<iterator, iterator>
equal_range(const key_type& __key)
{
- typedef typename _Base::iterator _Base_iterator;
typedef std::pair<_Base_iterator, _Base_iterator> __pair_type;
__pair_type __res = _Base::equal_range(__key);
return std::make_pair(iterator(__res.first, this),
std::pair<const_iterator, const_iterator>
equal_range(const key_type& __key) const
{
- typedef typename _Base::const_iterator _Base_iterator;
- typedef std::pair<_Base_iterator, _Base_iterator> __pair_type;
- __pair_type __res = _Base::equal_range(__key);
+ std::pair<_Base_const_iterator, _Base_const_iterator>
+ __res = _Base::equal_range(__key);
return std::make_pair(const_iterator(__res.first, this),
const_iterator(__res.second, this));
}
erase(const key_type& __key)
{
size_type __ret(0);
- iterator __victim(_Base::find(__key), this);
- if (__victim != end())
+ _Base_iterator __victim(_Base::find(__key));
+ if (__victim != _Base::end())
{
- this->erase(__victim);
+ this->_M_invalidate_if(_Equal(__victim));
+ _Base::erase(__victim);
__ret = 1;
}
return __ret;
erase(const_iterator __it)
{
__glibcxx_check_erase(__it);
- __it._M_invalidate();
+ this->_M_invalidate_if(_Equal(__it.base()));
return iterator(_Base::erase(__it.base()), this);
}
erase(const_iterator __first, const_iterator __last)
{
__glibcxx_check_erase_range(__first, __last);
- for (const_iterator __tmp = __first; __tmp != __last;)
- {
- const_iterator __victim = __tmp++;
- __victim._M_invalidate();
- }
+ for (_Base_const_iterator __tmp = __first.base();
+ __tmp != __last.base(); ++__tmp)
+ {
+ _GLIBCXX_DEBUG_VERIFY(__tmp != _Base::end(),
+ _M_message(__gnu_debug::__msg_valid_range)
+ ._M_iterator(__first, "first")
+ ._M_iterator(__last, "last"));
+ this->_M_invalidate_if(_Equal(__tmp));
+ }
return iterator(_Base::erase(__first.base(),
__last.base()), this);
}
void
_M_invalidate_all()
{
- typedef typename _Base::const_iterator _Base_const_iterator;
typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
- this->_M_invalidate_if(_Not_equal(_M_base().end()));
+ this->_M_invalidate_if(_Not_equal(_Base::end()));
}
};
typedef _GLIBCXX_STD_D::unordered_multiset<_Value, _Hash,
_Pred, _Alloc> _Base;
typedef __gnu_debug::_Safe_sequence<unordered_multiset> _Safe_base;
+ typedef typename _Base::const_iterator _Base_const_iterator;
+ typedef typename _Base::iterator _Base_iterator;
+ typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::key_type key_type;
typedef typename _Base::value_type value_type;
- typedef __gnu_debug::_Safe_iterator<typename _Base::iterator,
+ typedef __gnu_debug::_Safe_iterator<_Base_iterator,
unordered_multiset> iterator;
- typedef __gnu_debug::_Safe_iterator<typename _Base::const_iterator,
+ typedef __gnu_debug::_Safe_iterator<_Base_const_iterator,
unordered_multiset> const_iterator;
explicit
std::pair<iterator, iterator>
equal_range(const key_type& __key)
{
- typedef typename _Base::iterator _Base_iterator;
typedef std::pair<_Base_iterator, _Base_iterator> __pair_type;
__pair_type __res = _Base::equal_range(__key);
return std::make_pair(iterator(__res.first, this),
std::pair<const_iterator, const_iterator>
equal_range(const key_type& __key) const
{
- typedef typename _Base::const_iterator _Base_iterator;
- typedef std::pair<_Base_iterator, _Base_iterator> __pair_type;
- __pair_type __res = _Base::equal_range(__key);
+ std::pair<_Base_const_iterator, _Base_const_iterator>
+ __res = _Base::equal_range(__key);
return std::make_pair(const_iterator(__res.first, this),
const_iterator(__res.second, this));
}
erase(const key_type& __key)
{
size_type __ret(0);
- iterator __victim(_Base::find(__key), this);
- if (__victim != end())
+ _Base_iterator __victim(_Base::find(__key));
+ if (__victim != _Base::end())
{
- this->erase(__victim);
+ this->_M_invalidate_if(_Equal(__victim));
+ _Base::erase(__victim);
__ret = 1;
}
return __ret;
erase(const_iterator __it)
{
__glibcxx_check_erase(__it);
- __it._M_invalidate();
+ this->_M_invalidate_if(_Equal(__it.base()));
return iterator(_Base::erase(__it.base()), this);
}
erase(const_iterator __first, const_iterator __last)
{
__glibcxx_check_erase_range(__first, __last);
- for (const_iterator __tmp = __first; __tmp != __last;)
- {
- const_iterator __victim = __tmp++;
- __victim._M_invalidate();
- }
+ for (_Base_const_iterator __tmp = __first.base();
+ __tmp != __last.base(); ++__tmp)
+ {
+ _GLIBCXX_DEBUG_VERIFY(__tmp != _Base::end(),
+ _M_message(__gnu_debug::__msg_valid_range)
+ ._M_iterator(__first, "first")
+ ._M_iterator(__last, "last"));
+ this->_M_invalidate_if(_Equal(__tmp));
+ }
return iterator(_Base::erase(__first.base(),
__last.base()), this);
}
void
_M_invalidate_all()
{
- typedef typename _Base::const_iterator _Base_const_iterator;
typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
- this->_M_invalidate_if(_Not_equal(_M_base().end()));
+ this->_M_invalidate_if(_Not_equal(_Base::end()));
}
};