From 0bb6a348e393f460c0b1bf6ab04b4bae41102688 Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 22 May 2019 15:32:07 -0500 Subject: [PATCH] IdList::RemoveTagged switch to std::remove_if from iteration. NFC. --- src/dsc.h | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/dsc.h b/src/dsc.h index 042d1d0..2ea7066 100644 --- a/src/dsc.h +++ b/src/dsc.h @@ -474,24 +474,22 @@ public: } void RemoveTagged() { - int src, dest; - dest = 0; - for(src = 0; src < n; src++) { - if(elem[src].tag) { - // this item should be deleted - elem[src].Clear(); - } else { - if(src != dest) { - elem[dest] = elem[src]; - } - dest++; + auto newEnd = std::remove_if(this->begin(), this->end(), [](T &t) { + if(t.tag) { + t.Clear(); + return true; + } + return false; + }); + if(newEnd != this->end()) { + while (newEnd != this->end()) { + newEnd->~T(); + ++newEnd; } } - for(int i = dest; i < n; i++) - elem[i].~T(); - n = dest; - // and elemsAllocated is untouched, because we didn't resize + n = newEnd - begin(); } + void RemoveById(H h) { ClearTags(); FindById(h)->tag = 1;