Commit: 09c2bff32f411e1c9f100526d04de6430fa8cc43
Author: Campbell Barton
Date:   Sun Nov 29 17:11:40 2015 +1100
Branches: master
https://developer.blender.org/rB09c2bff32f411e1c9f100526d04de6430fa8cc43

Cleanup: rename `hash` -> `bucket_index`, edgehash API

Was confusing since a hash isn't typically used as an index on its own.

Also C99 for loop for bucket resize loop.

===================================================================

M       source/blender/blenlib/intern/BLI_ghash.c
M       source/blender/blenlib/intern/edgehash.c

===================================================================

diff --git a/source/blender/blenlib/intern/BLI_ghash.c 
b/source/blender/blenlib/intern/BLI_ghash.c
index a36a762..aa412fe 100644
--- a/source/blender/blenlib/intern/BLI_ghash.c
+++ b/source/blender/blenlib/intern/BLI_ghash.c
@@ -155,7 +155,7 @@ BLI_INLINE unsigned int ghash_entryhash(GHash *gh, const 
Entry *e)
 }
 
 /**
- * Get the bucket-hash for an already-computed full hash.
+ * Get the bucket-index for an already-computed full hash.
  */
 BLI_INLINE unsigned int ghash_bucket_index(GHash *gh, const unsigned int hash)
 {
@@ -175,7 +175,6 @@ static void ghash_buckets_resize(GHash *gh, const unsigned 
int nbuckets)
        Entry **buckets_new;
        const unsigned int nbuckets_old = gh->nbuckets;
        unsigned int i;
-       Entry *e;
 
        BLI_assert((gh->nbuckets != nbuckets) || !gh->buckets);
 //     printf("%s: %d -> %d\n", __func__, nbuckets_old, nbuckets);
@@ -191,8 +190,7 @@ static void ghash_buckets_resize(GHash *gh, const unsigned 
int nbuckets)
        if (buckets_old) {
                if (nbuckets > nbuckets_old) {
                        for (i = 0; i < nbuckets_old; i++) {
-                               Entry *e_next;
-                               for (e = buckets_old[i]; e; e = e_next) {
+                               for (Entry *e = buckets_old[i], *e_next; e; e = 
e_next) {
                                        const unsigned hash = 
ghash_entryhash(gh, e);
                                        const unsigned bucket_index = 
ghash_bucket_index(gh, hash);
                                        e_next = e->next;
@@ -204,8 +202,7 @@ static void ghash_buckets_resize(GHash *gh, const unsigned 
int nbuckets)
                else {
                        for (i = 0; i < nbuckets_old; i++) {
 #ifdef GHASH_USE_MODULO_BUCKETS
-                               Entry *e_next;
-                               for (e = buckets_old[i]; e; e = e_next) {
+                               for (Entry *e = buckets_old[i], *e_next; e; e = 
e_next) {
                                        const unsigned hash = 
ghash_entryhash(gh, e);
                                        const unsigned bucket_index = 
ghash_bucket_index(gh, hash);
                                        e_next = e->next;
@@ -217,6 +214,7 @@ static void ghash_buckets_resize(GHash *gh, const unsigned 
int nbuckets)
                                 * will go in same new bucket (i & new_mask)! */
                                const unsigned bucket_index = 
ghash_bucket_index(gh, i);
                                BLI_assert(!buckets_old[i] || (bucket_index == 
ghash_bucket_index(gh, ghash_entryhash(gh, buckets_old[i]))));
+                               Entry *e;
                                for (e = buckets_old[i]; e && e->next; e = 
e->next);
                                if (e) {
                                        e->next = buckets_new[bucket_index];
@@ -376,7 +374,7 @@ BLI_INLINE Entry *ghash_lookup_entry_ex(
 
 /**
  * Internal lookup function, returns previous entry of target one too.
- * Takes hash and bucket_index arguments to avoid calling #ghash_keyhash and 
#ghash_bucket_index multiple times.
+ * Takes bucket_index argument to avoid calling #ghash_keyhash and 
#ghash_bucket_index multiple times.
  * Useful when modifying buckets somehow (like removing an entry...).
  */
 BLI_INLINE Entry *ghash_lookup_entry_prev_ex(
diff --git a/source/blender/blenlib/intern/edgehash.c 
b/source/blender/blenlib/intern/edgehash.c
index 02b11e7..79fa776 100644
--- a/source/blender/blenlib/intern/edgehash.c
+++ b/source/blender/blenlib/intern/edgehash.c
@@ -88,9 +88,9 @@ struct EdgeHash {
  * \{ */
 
 /**
- * Get the hash for a key.
+ * Compute the hash and get the bucket-index.
  */
-BLI_INLINE unsigned int edgehash_keyhash(EdgeHash *eh, unsigned int v0, 
unsigned int v1)
+BLI_INLINE unsigned int edgehash_bucket_index(EdgeHash *eh, unsigned int v0, 
unsigned int v1)
 {
        BLI_assert(v0 < v1);
 
@@ -114,7 +114,6 @@ BLI_INLINE void edgehash_resize_buckets(EdgeHash *eh, const 
unsigned int nbucket
        EdgeEntry **buckets_new;
        const unsigned int nbuckets_old = eh->nbuckets;
        unsigned int i;
-       EdgeEntry *e;
 
        BLI_assert(eh->nbuckets != nbuckets);
 
@@ -122,12 +121,11 @@ BLI_INLINE void edgehash_resize_buckets(EdgeHash *eh, 
const unsigned int nbucket
        buckets_new = MEM_callocN(eh->nbuckets * sizeof(*eh->buckets), "eh 
buckets");
 
        for (i = 0; i < nbuckets_old; i++) {
-               EdgeEntry *e_next;
-               for (e = buckets_old[i]; e; e = e_next) {
-                       const unsigned hash = edgehash_keyhash(eh, e->v0, 
e->v1);
+               for (EdgeEntry *e = buckets_old[i], *e_next; e; e = e_next) {
+                       const unsigned bucket_index = edgehash_bucket_index(eh, 
e->v0, e->v1);
                        e_next = e->next;
-                       e->next = buckets_new[hash];
-                       buckets_new[hash] = e;
+                       e->next = buckets_new[bucket_index];
+                       buckets_new[bucket_index] = e;
                }
        }
 
@@ -147,14 +145,15 @@ BLI_INLINE void edgehash_buckets_reserve(EdgeHash *eh, 
const unsigned int nentri
 
 /**
  * Internal lookup function.
- * Takes a hash argument to avoid calling #edgehash_keyhash multiple times.
+ * Takes a \a bucket_index argument to avoid calling #edgehash_bucket_index 
multiple times.
  */
-BLI_INLINE EdgeEntry *edgehash_lookup_entry_ex(EdgeHash *eh, unsigned int v0, 
unsigned int v1,
-                                               const unsigned int hash)
+BLI_INLINE EdgeEntry *edgehash_lookup_entry_ex(
+        EdgeHash *eh, unsigned int v0, unsigned int v1,
+        const unsigned int bucket_index)
 {
        EdgeEntry *e;
        BLI_assert(v0 < v1);
-       for (e = eh->buckets[hash]; e; e = e->next) {
+       for (e = eh->buckets[bucket_index]; e; e = e->next) {
                if (UNLIKELY(v0 == e->v0 && v1 == e->v1)) {
                        return e;
                }
@@ -167,10 +166,9 @@ BLI_INLINE EdgeEntry *edgehash_lookup_entry_ex(EdgeHash 
*eh, unsigned int v0, un
  */
 BLI_INLINE EdgeEntry *edgehash_lookup_entry(EdgeHash *eh, unsigned int v0, 
unsigned int v1)
 {
-       unsigned int hash;
-       EDGE_ORD(v0, v1); /* ensure v0 is smaller */
-       hash = edgehash_keyhash(eh, v0, v1);
-       return edgehash_lookup_entry_ex(eh, v0, v1, hash);
+       EDGE_ORD(v0, v1);
+       const unsigned int bucket_index = edgehash_bucket_index(eh, v0, v1);
+       return edgehash_lookup_entry_ex(eh, v0, v1, bucket_index);
 }
 
 
@@ -198,10 +196,11 @@ static EdgeHash *edgehash_new(const char *info,
 
 /**
  * Internal insert function.
- * Takes a hash argument to avoid calling #edgehash_keyhash multiple times.
+ * Takes a \a bucket_index argument to avoid calling #edgehash_bucket_index 
multiple times.
  */
-BLI_INLINE void edgehash_insert_ex(EdgeHash *eh, unsigned int v0, unsigned int 
v1, void *val,
-                                   unsigned int hash)
+BLI_INLINE void edgehash_insert_ex(
+        EdgeHash *eh, unsigned int v0, unsigned int v1, void *val,
+        const unsigned int bucket_index)
 {
        EdgeEntry *e = BLI_mempool_alloc(eh->epool);
 
@@ -212,11 +211,11 @@ BLI_INLINE void edgehash_insert_ex(EdgeHash *eh, unsigned 
int v0, unsigned int v
        BLI_assert(v0 < v1);
        BLI_assert(v0 != v1);
 
-       e->next = eh->buckets[hash];
+       e->next = eh->buckets[bucket_index];
        e->v0 = v0;
        e->v1 = v1;
        e->val = val;
-       eh->buckets[hash] = e;
+       eh->buckets[bucket_index] = e;
 
        if (UNLIKELY(edgehash_test_expand_buckets(++eh->nentries, 
eh->nbuckets))) {
                edgehash_resize_buckets(eh, _ehash_hashsizes[++eh->cursize]);
@@ -226,8 +225,9 @@ BLI_INLINE void edgehash_insert_ex(EdgeHash *eh, unsigned 
int v0, unsigned int v
 /**
  * Insert function that doesn't set the value (use for EdgeSet)
  */
-BLI_INLINE void edgehash_insert_ex_keyonly(EdgeHash *eh, unsigned int v0, 
unsigned int v1,
-                                           unsigned int hash)
+BLI_INLINE void edgehash_insert_ex_keyonly(
+        EdgeHash *eh, unsigned int v0, unsigned int v1,
+        const unsigned int bucket_index)
 {
        EdgeEntry *e = BLI_mempool_alloc(eh->epool);
 
@@ -237,10 +237,10 @@ BLI_INLINE void edgehash_insert_ex_keyonly(EdgeHash *eh, 
unsigned int v0, unsign
        BLI_assert(v0 < v1);
        BLI_assert(v0 != v1);
 
-       e->next = eh->buckets[hash];
+       e->next = eh->buckets[bucket_index];
        e->v0 = v0;
        e->v1 = v1;
-       eh->buckets[hash] = e;
+       eh->buckets[bucket_index] = e;
 
        if (UNLIKELY(edgehash_test_expand_buckets(++eh->nentries, 
eh->nbuckets))) {
                edgehash_resize_buckets(eh, _ehash_hashsizes[++eh->cursize]);
@@ -252,7 +252,7 @@ BLI_INLINE void edgehash_insert_ex_keyonly(EdgeHash *eh, 
unsigned int v0, unsign
  */
 BLI_INLINE void edgehash_insert_ex_keyonly_entry(
         EdgeHash *eh, unsigned int v0, unsigned int v1,
-        unsigned int hash,
+        const unsigned int bucket_index,
         EdgeEntry *e)
 {
        BLI_assert((eh->flag & EDGEHASH_FLAG_ALLOW_DUPES) || 
(BLI_edgehash_haskey(eh, v0, v1) == 0));
@@ -261,11 +261,11 @@ BLI_INLINE void edgehash_insert_ex_keyonly_entry(
        BLI_assert(v0 < v1);
        BLI_assert(v0 != v1);
 
-       e->next = eh->buckets[hash];
+       e->next = eh->buckets[bucket_index];
        e->v0 = v0;
        e->v1 = v1;
        /* intentionally leave value unset */
-       eh->buckets[hash] = e;
+       eh->buckets[bucket_index] = e;
 
        if (UNLIKELY(edgehash_test_expand_buckets(++eh->nentries, 
eh->nbuckets))) {
                edgehash_resize_buckets(eh, _ehash_hashsizes[++eh->cursize]);
@@ -274,10 +274,9 @@ BLI_INLINE void edgehash_insert_ex_keyonly_entry(
 
 BLI_INLINE void edgehash_insert(EdgeHash *eh, unsigned int v0, unsigned int 
v1, void *val)
 {
-       unsigned int hash;
-       EDGE_ORD(v0, v1); /* ensure v0 is smaller */
-       hash = edgehash_keyhash(eh, v0, v1);
-       edgehash_insert_ex(eh, v0, v1, val, hash);
+       EDGE_ORD(v0, v1);
+       const unsigned int bucket_index = edgehash_bucket_index(eh, v0, v1);
+       edgehash_insert_ex(eh, v0, v1, val, bucket_index);
 }
 
 /**
@@ -286,14 +285,14 @@ BLI_INLINE void edgehash_insert(EdgeHash *eh, unsigned 
int v0, unsigned int v1,
 static EdgeEntry *edgehash_remove_ex(
         EdgeHash *eh, unsigned int v0, unsigned int v1,
         EdgeHashFreeFP valfreefp,
-        unsigned int hash)
+        const unsigned int bucket_index)
 {
        EdgeEntry *e;
        EdgeEntry *e_prev = NULL;
 
        BLI_assert(v0 < v1);
 
-       for (e = eh->buckets[hash]; e; e = e->next) {
+       for (e = eh->buckets[bucket_index]; e; e = e->next) {
                if (UNLIKELY(v0 == e->v0 && v1 == e->v1)) {
                        EdgeEntry *e_next = e->next;
 
@@ -305,7 +304,7 @@ static EdgeEntry *edgehash_remove_ex(
                                e_prev->next = e_next;
                        }
                        else {
-                               eh->buckets[hash] = e_next;
+                               eh->buckets[bucket_index] = e_next;
                        }
 
                        eh->nentries--;
@@ -374,21 +373,18 @@ void BLI_edgehash_insert(EdgeHash *eh, unsigned int v0, 
unsigned int v1, void *v
  */
 bool BLI_edgehash_reinsert(EdgeHash *eh, unsigned int v0, unsigned int v1, 
void *val)
 {
-       unsigned int hash;
-       EdgeEntry *e;
-
        IS_EDGEHASH_ASSERT(eh);
 
-       EDGE_ORD(v0, v1); /* ensure v0 is smaller */
-       hash = edgehash_keyhash(eh, v0, v1);
+       EDGE_ORD(v0, v1);
+       const unsigned int bucket_index = edgehash_bucket_index(eh, v0, v1);
 
-       e = edgehash_lookup_entry_ex(eh, v0, v1, hash);
+       EdgeEntry

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to