[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57657] trunk/blender/source/blender/ blenlib/intern: Make edgehash and ghash use the same limit for expanding buckets, r26206 changed ghash.
Campbell Barton
ideasman42 at gmail.com
Sun Jun 23 00:30:57 CEST 2013
Revision: 57657
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57657
Author: campbellbarton
Date: 2013-06-22 22:30:56 +0000 (Sat, 22 Jun 2013)
Log Message:
-----------
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.
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=26206
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=26206
Modified Paths:
--------------
trunk/blender/source/blender/blenlib/intern/BLI_ghash.c
trunk/blender/source/blender/blenlib/intern/edgehash.c
Modified: trunk/blender/source/blender/blenlib/intern/BLI_ghash.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/BLI_ghash.c 2013-06-22 20:20:06 UTC (rev 57656)
+++ trunk/blender/source/blender/blenlib/intern/BLI_ghash.c 2013-06-22 22:30:56 UTC (rev 57657)
@@ -28,6 +28,8 @@
/** \file blender/blenlib/intern/BLI_ghash.c
* \ingroup bli
+ *
+ * \note edgehash.c is based on this, make sure they stay in sync.
*/
#include <string.h>
@@ -90,22 +92,21 @@
e->val = val;
gh->buckets[hash] = e;
- if (++gh->nentries > (float)gh->nbuckets / 2) {
+ if (UNLIKELY(++gh->nentries > gh->nbuckets / 2)) {
Entry **old = gh->buckets;
- unsigned int i, nold = gh->nbuckets;
+ const unsigned nold = gh->nbuckets;
+ unsigned int i;
gh->nbuckets = hashsizes[++gh->cursize];
gh->buckets = (Entry **)MEM_callocN(gh->nbuckets * sizeof(*gh->buckets), "buckets");
for (i = 0; i < nold; i++) {
- for (e = old[i]; e; ) {
- Entry *n = e->next;
-
+ Entry *e_next;
+ for (e = old[i]; e; e = e_next) {
+ e_next = e->next;
hash = gh->hashfp(e->key) % gh->nbuckets;
e->next = gh->buckets[hash];
gh->buckets[hash] = e;
-
- e = n;
}
}
Modified: trunk/blender/source/blender/blenlib/intern/edgehash.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/edgehash.c 2013-06-22 20:20:06 UTC (rev 57656)
+++ trunk/blender/source/blender/blenlib/intern/edgehash.c 2013-06-22 22:30:56 UTC (rev 57657)
@@ -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 @@
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;
}
}
More information about the Bf-blender-cvs
mailing list