diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-08-25 20:16:38 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-08-25 20:16:38 +0400 |
commit | e2bd3a4644aa0317356e801df1a2fda1d998df43 (patch) | |
tree | 245ea3f28ce772f4821a23b595d61e54a1cd7617 /source/blender/blenlib/intern/edgehash.c | |
parent | 28243b2e5fd272d12c4349c7998b39893c20628c (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.c | 14 |
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"); |