[Bf-blender-cvs] [aa10cf7] master: GHash: add BLI_ghashutil_uinthash_v4 for hashing 4 ints at once

Campbell Barton noreply at git.blender.org
Tue Apr 15 06:48:47 CEST 2014


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 */




More information about the Bf-blender-cvs mailing list