From a264dff4fa7dd0bb2e3c9abe805376b730d28c34 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 29 Mar 2022 10:40:47 +0200 Subject: BLI: optimize Map/Set/VectorSet.clear methods Previously, those methods would destruct and reconstruct the data structure. While that was more simple in initial implementation, it has some downsides which are not resolved: * Already allocated memory is lost. So new memory would have to be allocated when the data structure is refilled. * The clearing process itself was slower because it did unnecessary work. --- source/blender/blenlib/BLI_set.hh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'source/blender/blenlib/BLI_set.hh') diff --git a/source/blender/blenlib/BLI_set.hh b/source/blender/blenlib/BLI_set.hh index bf177802c97..391d31c2228 100644 --- a/source/blender/blenlib/BLI_set.hh +++ b/source/blender/blenlib/BLI_set.hh @@ -515,8 +515,13 @@ class Set { */ void clear() { - this->~Set(); - new (this) Set(); + for (Slot &slot : slots_) { + slot.~Slot(); + new (&slot) Slot(); + } + + removed_slots_ = 0; + occupied_and_removed_slots_ = 0; } /** -- cgit v1.2.3