diff options
author | default <nobody@localhost> | 2023-07-03 16:41:51 +0200 |
---|---|---|
committer | default <nobody@localhost> | 2023-07-03 16:41:51 +0200 |
commit | 5b3c7d45bbaa4bb0fee61b89f4ecc5df4c4ffcd8 (patch) | |
tree | 436cecffbe17a2edaaa66ba83850658e92291217 | |
parent | 7eeeeb3022b66a70f0bf9148348ef72206a13da4 (diff) |
Backport from xs.
-rw-r--r-- | xs.h | 18 | ||||
-rw-r--r-- | xs_set.h | 16 | ||||
-rw-r--r-- | xs_version.h | 2 |
3 files changed, 20 insertions, 16 deletions
@@ -122,6 +122,7 @@ xs_str *xs_hex_enc(const xs_val *data, int size); xs_val *xs_hex_dec(const xs_str *hex, int *size); int xs_is_hex(const char *str); +unsigned int xs_hash_func(const char *data, int size); #ifdef XS_ASSERT #include <assert.h> @@ -136,6 +137,8 @@ extern xs_val xs_stock_null[]; extern xs_val xs_stock_true[]; extern xs_val xs_stock_false[]; +#define xs_return(v) xs_val *__r = v; v = NULL; return __r + #ifdef XS_IMPLEMENTATION @@ -1186,6 +1189,21 @@ int xs_is_hex(const char *str) } +unsigned int xs_hash_func(const char *data, int size) +/* a general purpose hashing function */ +{ + unsigned int hash = 0x666; + int n; + + for (n = 0; n < size; n++) { + hash ^= data[n]; + hash *= 111111111; + } + + return hash ^ hash >> 16; +} + + #endif /* XS_IMPLEMENTATION */ #endif /* _XS_H */ @@ -51,26 +51,12 @@ void xs_set_free(xs_set *s) } -static unsigned int _calc_hash(const char *data, int size) -{ - unsigned int hash = 0x666; - int n; - - for (n = 0; n < size; n++) { - hash ^= data[n]; - hash *= 111111111; - } - - return hash ^ hash >> 16; -} - - static int _store_hash(xs_set *s, const char *data, int value) { unsigned int hash, i; int sz = xs_size(data); - hash = _calc_hash(data, sz); + hash = xs_hash_func(data, sz); while (s->hash[(i = hash % s->elems)]) { /* get the pointer to the stored data */ diff --git a/xs_version.h b/xs_version.h index 6d8b8b8..a8007e7 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* 567d70ecbe16b2358873b8bc971a6e092c3c0074 */ +/* dada4e932155b621ab6d66820f62ea9cf09cbb70 */ |