forked from boostorg/unordered
fixed clear
This commit is contained in:
@ -755,7 +755,20 @@ public:
|
|||||||
|
|
||||||
void clear()noexcept
|
void clear()noexcept
|
||||||
{
|
{
|
||||||
for_all_elements([this](value_type* p){destroy_element(p);});
|
auto pg=arrays.groups;
|
||||||
|
auto p=arrays.elements;
|
||||||
|
if(p){
|
||||||
|
for(std::size_t pos=0,last=arrays.groups_size_mask+1;
|
||||||
|
pos!=last;++pos,++pg,p+=N){
|
||||||
|
auto mask=pg->match_really_occupied();
|
||||||
|
while(mask){
|
||||||
|
auto n=unchecked_countr_zero(mask);
|
||||||
|
destroy_element(p+n);
|
||||||
|
pg->reset(n);
|
||||||
|
mask&=mask-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
size_=0;
|
size_=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user