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-06-23 02:30:56 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-06-23 02:30:56 +0400
commit1a50be2d94dc5bc6e87e6669b79d66c3771585a2 (patch)
tree640e3818a9d1459ef339e32d0b60865c57ad7a54 /source/blender/blenlib/intern/edgehash.c
parent1fb980e7df3587982e9117c409f4c1e5af50c90a (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.c20
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;
}
}