rsx: simplify simple_array<T>::erase_if

This commit is contained in:
kd-11 2025-04-26 19:19:28 +03:00
parent d7ef5a85dc
commit 91ec5367f3

View file

@ -390,22 +390,29 @@ namespace rsx
}
bool ret = false;
for (auto last = _data + (_size - 1), ptr = last; ptr >= _data; ptr--)
for (auto ptr = _data, last = _data + _size - 1; ptr <= last;)
{
if (predicate(*ptr))
{
ret = true;
if (ptr != last) // If not last
if (ptr == last)
{
// Move last item into current one
std::memcpy(ptr, last, sizeof(Ty));
// Popping the last entry from list. Just set the new size and exit
_size--;
break;
}
// Pop last entry from list and set new last item
// Move item to the end of the list and shrink by 1
std::memcpy(ptr, last, sizeof(Ty));
_size--;
last--;
// Retest the same ptr which now has the previous tail item
continue;
}
ptr++;
}
return ret;