mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2024-12-18 08:22:13 +00:00
Make it a function
This commit is contained in:
parent
b08195e2da
commit
641136fee3
1 changed files with 13 additions and 9 deletions
22
hash.c
22
hash.c
|
@ -301,14 +301,16 @@ static GMQCC_FORCEINLINE uint32_t hash_murmur(const void *GMQCC_RESTRICT key, si
|
||||||
#define STRLEN_ONES ((size_t)-1/UCHAR_MAX)
|
#define STRLEN_ONES ((size_t)-1/UCHAR_MAX)
|
||||||
#define STRLEN_HIGHS (STRLEN_ONES * (UCHAR_MAX/2+1))
|
#define STRLEN_HIGHS (STRLEN_ONES * (UCHAR_MAX/2+1))
|
||||||
#define STRLEN_HASZERO(X) (((X)-STRLEN_ONES) & ~(X) & STRLEN_HIGHS)
|
#define STRLEN_HASZERO(X) (((X)-STRLEN_ONES) & ~(X) & STRLEN_HIGHS)
|
||||||
ASAN_DISABLE size_t hash(const char *key) {
|
|
||||||
|
static ASAN_DISABLE size_t hash_strlen(const char *key) {
|
||||||
const char *s = key;
|
const char *s = key;
|
||||||
const char *a = s;
|
const char *a = s;
|
||||||
const size_t *w;
|
const size_t *w;
|
||||||
|
|
||||||
for (; (uintptr_t)s % STRLEN_ALIGN; s++) {
|
for (; (uintptr_t)s % STRLEN_ALIGN; s++) {
|
||||||
if (!*s)
|
if (*s)
|
||||||
return hash_murmur((const void *)key, s-a);
|
continue;
|
||||||
|
return s-a;
|
||||||
}
|
}
|
||||||
|
|
||||||
VALGRIND_MAKE_MEM_DEFINED(s, STRLEN_ALIGN);
|
VALGRIND_MAKE_MEM_DEFINED(s, STRLEN_ALIGN);
|
||||||
|
@ -321,12 +323,14 @@ ASAN_DISABLE size_t hash(const char *key) {
|
||||||
|
|
||||||
/* It's not legal to access this area anymore */
|
/* It's not legal to access this area anymore */
|
||||||
VALGRIND_MAKE_MEM_NOACCESS(s + 1, STRLEN_ALIGN);
|
VALGRIND_MAKE_MEM_NOACCESS(s + 1, STRLEN_ALIGN);
|
||||||
|
return s-a;
|
||||||
return hash_murmur((const void *)key, s-a);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* No way to disable asan instrumenting, use strlen. */
|
static GMQCC_INLINE size_t hash_strlen(const char *key) {
|
||||||
size_t hash(const char *key) {
|
return strlen(key);
|
||||||
return hash_murmur((const void *)key, strlen(key));
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
size_t hash(const char *key) {
|
||||||
|
return hash_murmur((const void *)key, hash_strlen(key));
|
||||||
}
|
}
|
||||||
#endif /*! HAS_ASAN_DISABLE */
|
|
||||||
|
|
Loading…
Reference in a new issue