rsx: simplify simple_array<T>::erase_if

This commit is contained in:
kd-11 2025-04-26 19:19:28 +03:00 committed by kd-11
parent f435225940
commit d958f8291a

View file

@ -390,22 +390,29 @@ namespace rsx
} }
bool ret = false; 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)) if (predicate(*ptr))
{ {
ret = true; ret = true;
if (ptr != last) // If not last if (ptr == last)
{ {
// Move last item into current one // Popping the last entry from list. Just set the new size and exit
std::memcpy(ptr, last, sizeof(Ty)); _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--; _size--;
last--; last--;
// Retest the same ptr which now has the previous tail item
continue;
} }
ptr++;
} }
return ret; return ret;