Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2022-03-29 11:40:47 +0300
committerJacques Lucke <jacques@blender.org>2022-03-29 11:41:01 +0300
commita264dff4fa7dd0bb2e3c9abe805376b730d28c34 (patch)
treea9a0443ade5081f3fdc0304cae99ccdb6cc34567 /source/blender/blenlib/BLI_set.hh
parent29d9bb89ce34ead28a3e470edec77f8ab8d1a472 (diff)
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.
Diffstat (limited to 'source/blender/blenlib/BLI_set.hh')
-rw-r--r--source/blender/blenlib/BLI_set.hh9
1 files changed, 7 insertions, 2 deletions
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;
}
/**