Implement erase(), get erase_tests passing

This commit is contained in:
Christian Mazakas
2022-10-04 10:57:48 -07:00
parent 9280e13697
commit 4cdfb2537a
3 changed files with 21 additions and 0 deletions

View File

@ -590,6 +590,8 @@ private:
template<typename,typename,typename,typename>
class table;
class const_iterator_cast_tag {};
template<typename Value,typename Group,bool Const>
class table_iterator
{
@ -604,6 +606,9 @@ public:
template<bool Const2,typename std::enable_if<!Const2>::type* =nullptr>
table_iterator(const table_iterator<Value,Group,Const2>& x):
pc{x.pc},p{x.p}{}
table_iterator(
const_iterator_cast_tag, const table_iterator<Value,Group,true>& x):
pc{x.pc},p{x.p}{}
inline reference operator*()const noexcept{return *p;}
inline pointer operator->()const noexcept{return p;}

View File

@ -239,6 +239,14 @@ namespace boost {
void erase(iterator pos) { table_.erase(pos); }
void erase(const_iterator pos) { return table_.erase(pos); }
iterator erase(const_iterator first, const_iterator last)
{
while (first != last) {
this->erase(first++);
}
return iterator{detail::foa::const_iterator_cast_tag{}, last};
}
size_type erase(key_type const& key) { return table_.erase(key); }
/// Lookup

View File

@ -176,6 +176,14 @@ namespace boost {
}
void erase(const_iterator pos) { return table_.erase(pos); }
iterator erase(const_iterator first, const_iterator last)
{
while (first != last) {
this->erase(first++);
}
return iterator{detail::foa::const_iterator_cast_tag{}, last};
}
size_type erase(key_type const& key) { return table_.erase(key); }
/// Lookup