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:
authorCampbell Barton <ideasman42@gmail.com>2013-08-25 20:16:38 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-08-25 20:16:38 +0400
commite2bd3a4644aa0317356e801df1a2fda1d998df43 (patch)
tree245ea3f28ce772f4821a23b595d61e54a1cd7617 /source/blender/blenlib/intern/edgehash.c
parent28243b2e5fd272d12c4349c7998b39893c20628c (diff)
clearing the mempool can now keep more then a single element reserved.
Diffstat (limited to 'source/blender/blenlib/intern/edgehash.c')
-rw-r--r--source/blender/blenlib/intern/edgehash.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c
index cae23356782..cf1405e8f01 100644
--- a/source/blender/blenlib/intern/edgehash.c
+++ b/source/blender/blenlib/intern/edgehash.c
@@ -90,6 +90,16 @@ BLI_INLINE bool edgehash_test_expand_buckets(const unsigned int nentries, const
return (nentries > nbuckets * 3);
}
+/**
+ * Increase initial bucket size to match a reserved ammount.
+ */
+BLI_INLINE void edgehash_buckets_reserve(EdgeHash *eh, const unsigned int nentries_reserve)
+{
+ while (edgehash_test_expand_buckets(nentries_reserve, eh->nbuckets)) {
+ eh->nbuckets = _ehash_hashsizes[++eh->cursize];
+ }
+}
+
BLI_INLINE unsigned int edgehash_keyhash(EdgeHash *eh, unsigned int v0, unsigned int v1)
{
BLI_assert(v0 < v1);
@@ -176,9 +186,7 @@ EdgeHash *BLI_edgehash_new_ex(const char *info,
/* if we have reserved the number of elements that this hash will contain */
if (nentries_reserve) {
- while (edgehash_test_expand_buckets(nentries_reserve, eh->nbuckets)) {
- eh->nbuckets = _ehash_hashsizes[++eh->cursize];
- }
+ edgehash_buckets_reserve(eh, nentries_reserve);
}
eh->buckets = MEM_callocN(eh->nbuckets * sizeof(*eh->buckets), "eh buckets 2");