diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-06-23 02:30:56 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-06-23 02:30:56 +0400 |
commit | 1a50be2d94dc5bc6e87e6669b79d66c3771585a2 (patch) | |
tree | 640e3818a9d1459ef339e32d0b60865c57ad7a54 /source/blender/blenlib/intern/edgehash.c | |
parent | 1fb980e7df3587982e9117c409f4c1e5af50c90a (diff) |
Make edgehash and ghash use the same limit for expanding buckets, r26206 changed ghash.
double checked and r26206 does indeed give a speedup, so change for edgehash too.
Diffstat (limited to 'source/blender/blenlib/intern/edgehash.c')
-rw-r--r-- | source/blender/blenlib/intern/edgehash.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c index 68eab5f60e7..6ed9b559711 100644 --- a/source/blender/blenlib/intern/edgehash.c +++ b/source/blender/blenlib/intern/edgehash.c @@ -28,6 +28,8 @@ /** \file blender/blenlib/intern/edgehash.c * \ingroup bli + * + * \note Based on 'BLI_ghash.c', make sure these stay in sync. */ @@ -110,29 +112,27 @@ void BLI_edgehash_insert(EdgeHash *eh, unsigned int v0, unsigned int v1, void *v hash = EDGE_HASH(v0, v1) % eh->nbuckets; + e->next = eh->buckets[hash]; e->v0 = v0; e->v1 = v1; e->val = val; - e->next = eh->buckets[hash]; eh->buckets[hash] = e; - if (++eh->nentries > eh->nbuckets * 3) { + if (UNLIKELY(++eh->nentries > eh->nbuckets / 2)) { EdgeEntry **old = eh->buckets; - unsigned int i, nold = eh->nbuckets; + const unsigned int nold = eh->nbuckets; + unsigned int i; eh->nbuckets = _ehash_hashsizes[++eh->cursize]; - eh->buckets = MEM_mallocN(eh->nbuckets * sizeof(*eh->buckets), "eh buckets"); - memset(eh->buckets, 0, eh->nbuckets * sizeof(*eh->buckets)); + eh->buckets = MEM_callocN(eh->nbuckets * sizeof(*eh->buckets), "eh buckets"); for (i = 0; i < nold; i++) { - for (e = old[i]; e; ) { - EdgeEntry *n = e->next; - + EdgeEntry *e_next; + for (e = old[i]; e; e = e_next) { + e_next = e->next; hash = EDGE_HASH(e->v0, e->v1) % eh->nbuckets; e->next = eh->buckets[hash]; eh->buckets[hash] = e; - - e = n; } } |