Commit: aa10cf7f5cc3b2acdc0fd79b0eecccae029afcfa
Author: Campbell Barton
Date:   Tue Apr 15 14:39:23 2014 +1000
https://developer.blender.org/rBaa10cf7f5cc3b2acdc0fd79b0eecccae029afcfa

GHash: add BLI_ghashutil_uinthash_v4 for hashing 4 ints at once

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

M       source/blender/blenlib/BLI_ghash.h
M       source/blender/blenlib/intern/BLI_ghash.c
M       source/blender/bmesh/tools/bmesh_beautify.c

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

diff --git a/source/blender/blenlib/BLI_ghash.h 
b/source/blender/blenlib/BLI_ghash.h
index 1e51bd9..d762876 100644
--- a/source/blender/blenlib/BLI_ghash.h
+++ b/source/blender/blenlib/BLI_ghash.h
@@ -132,6 +132,12 @@ int             BLI_ghashutil_strcmp(const void *a, const 
void *b);
                 CHECK_TYPE_INLINE(key, int), \
                 BLI_ghashutil_uinthash((unsigned int)key))
 unsigned int    BLI_ghashutil_uinthash(unsigned int key);
+#define         BLI_ghashutil_inthash_v4(key) ( \
+                CHECK_TYPE_INLINE(key, int *), \
+                BLI_ghashutil_uinthash_v4((const unsigned int *)key))
+unsigned int    BLI_ghashutil_uinthash_v4(const unsigned int key[4]);
+#define         BLI_ghashutil_inthash_v4_p \
+   ((GSetHashFP)BLI_ghashutil_uinthash_v4)
 unsigned int    BLI_ghashutil_inthash_p(const void *ptr);
 int             BLI_ghashutil_intcmp(const void *a, const void *b);
 
diff --git a/source/blender/blenlib/intern/BLI_ghash.c 
b/source/blender/blenlib/intern/BLI_ghash.c
index 33a3ba3..4849ef3 100644
--- a/source/blender/blenlib/intern/BLI_ghash.c
+++ b/source/blender/blenlib/intern/BLI_ghash.c
@@ -679,6 +679,19 @@ int BLI_ghashutil_ptrcmp(const void *a, const void *b)
                return (a < b) ? -1 : 1;
 }
 
+unsigned int BLI_ghashutil_uinthash_v4(const unsigned int key[4])
+{
+       unsigned int hash;
+       hash  = key[0];
+       hash *= 37;
+       hash += key[1];
+       hash *= 37;
+       hash += key[2];
+       hash *= 37;
+       hash += key[3];
+       return hash;
+}
+
 unsigned int BLI_ghashutil_uinthash(unsigned int key)
 {
        key += ~(key << 16);
diff --git a/source/blender/bmesh/tools/bmesh_beautify.c 
b/source/blender/bmesh/tools/bmesh_beautify.c
index b19a7d0..8223a12 100644
--- a/source/blender/bmesh/tools/bmesh_beautify.c
+++ b/source/blender/bmesh/tools/bmesh_beautify.c
@@ -59,16 +59,14 @@ typedef struct EdRotState {
        int f1, f2; /*  face vert, small -> large */
 } EdRotState;
 
+#if 0
+/* use BLI_ghashutil_inthash_v4 direct */
 static unsigned int erot_gsetutil_hash(const void *ptr)
 {
        const EdRotState *e_state = (const EdRotState *)ptr;
-       unsigned int hash;
-       hash  = BLI_ghashutil_inthash(e_state->v1);
-       hash ^= BLI_ghashutil_inthash(e_state->v2);
-       hash ^= BLI_ghashutil_inthash(e_state->f1);
-       hash ^= BLI_ghashutil_inthash(e_state->f2);
-       return hash;
+       return BLI_ghashutil_inthash_v4(&e_state->v1);
 }
+#endif
 static int erot_gsetutil_cmp(const void *a, const void *b)
 {
        const EdRotState *e_state_a = (const EdRotState *)a;
@@ -86,7 +84,7 @@ static int erot_gsetutil_cmp(const void *a, const void *b)
 
 static GSet *erot_gset_new(void)
 {
-       return BLI_gset_new(erot_gsetutil_hash, erot_gsetutil_cmp, __func__);
+       return BLI_gset_new(BLI_ghashutil_inthash_v4_p, erot_gsetutil_cmp, 
__func__);
 }
 
 /* ensure v0 is smaller */

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

Reply via email to