IdList::RemoveTagged switch to std::remove_if from iteration. NFC.

This commit is contained in:
Ryan Pavlik 2019-05-22 15:32:07 -05:00 committed by whitequark
parent 3ea077b70f
commit 0bb6a348e3

View File

@ -474,24 +474,22 @@ public:
} }
void RemoveTagged() { void RemoveTagged() {
int src, dest; auto newEnd = std::remove_if(this->begin(), this->end(), [](T &t) {
dest = 0; if(t.tag) {
for(src = 0; src < n; src++) { t.Clear();
if(elem[src].tag) { return true;
// this item should be deleted }
elem[src].Clear(); return false;
} else { });
if(src != dest) { if(newEnd != this->end()) {
elem[dest] = elem[src]; while (newEnd != this->end()) {
} newEnd->~T();
dest++; ++newEnd;
} }
} }
for(int i = dest; i < n; i++) n = newEnd - begin();
elem[i].~T();
n = dest;
// and elemsAllocated is untouched, because we didn't resize
} }
void RemoveById(H h) { void RemoveById(H h) {
ClearTags(); ClearTags();
FindById(h)->tag = 1; FindById(h)->tag = 1;