diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-04-15 08:39:23 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-04-15 08:40:33 +0400 |
commit | aa10cf7f5cc3b2acdc0fd79b0eecccae029afcfa (patch) | |
tree | bc1b692349a746590eb3ec1cba89a3bfe675e0ab /source | |
parent | cad4bfe653e12bb4c6178b7a83d35806d10ee9b0 (diff) |
GHash: add BLI_ghashutil_uinthash_v4 for hashing 4 ints at once
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenlib/BLI_ghash.h | 6 | ||||
-rw-r--r-- | source/blender/blenlib/intern/BLI_ghash.c | 13 | ||||
-rw-r--r-- | source/blender/bmesh/tools/bmesh_beautify.c | 12 |
3 files changed, 24 insertions, 7 deletions
diff --git a/source/blender/blenlib/BLI_ghash.h b/source/blender/blenlib/BLI_ghash.h index 1e51bd9afea..d762876a55a 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 33a3ba30e4b..4849ef3e958 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 b19a7d0e9b6..8223a122e2b 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 */ |