moved erase_if_impl from foa::table_core into foa::table

This commit is contained in:
joaquintides
2023-03-25 12:31:49 +01:00
parent 7415721f7d
commit 240f5f94b1
2 changed files with 9 additions and 12 deletions

View File

@@ -1616,16 +1616,6 @@ public:
return it;
}
template<typename Predicate>
std::size_t erase_if_impl(Predicate&& pr)
{
std::size_t s=size();
for_all_elements([&,this](group_type* pg,unsigned int n,element_type* p){
if(pr(type_policy::value_from(*p))) erase(pg,n,p);
});
return std::size_t(s-size());
}
template<typename F>
void for_all_elements(F f)const
{

View File

@@ -420,9 +420,16 @@ public:
using super::reserve;
template<typename Predicate>
friend std::size_t erase_if(table& x,Predicate pr)
friend std::size_t erase_if(table& x,Predicate&& pr)
{
return x.erase_if_impl(pr);
std::size_t s=size();
this->for_all_elements(
[&,this](group_type* pg,unsigned int n,element_type* p){
if(pr(const_cast<const value_type&>(type_policy::value_from(*p))){
this->erase(pg,n,p);
}
});
return std::size_t(s-size());
}
private: