rsx/util: Change the filter function to an in-place erase-if operation

This commit is contained in:
kd-11 2024-11-03 04:17:26 +03:00
parent b94ddb0cd3
commit 11280c254c

View file

@ -382,22 +382,26 @@ namespace rsx
return false;
}
void filter(std::predicate<const Ty&> auto predicate)
bool erase_if(std::predicate<const Ty&> auto predicate)
{
if (!_size)
{
return;
return false;
}
bool ret = false;
for (auto ptr = _data, last = _data + _size - 1; ptr < last; ptr++)
{
if (!predicate(*ptr))
if (predicate(*ptr))
{
// Move item to the end of the list and shrink by 1
std::memcpy(ptr, last, sizeof(Ty));
last = _data + (--_size);
ret = true;
}
}
return ret;
}
void sort(std::predicate<const Ty&, const Ty&> auto predicate)