git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rewrite the lunabuild toolchain with enhanced feature (#60)
[lunaix-os.git]
/
lunaix-os
/
libs
/
hash.c
diff --git
a/lunaix-os/libs/hash.c
b/lunaix-os/libs/hash.c
index 293ec67bc3bddb6d7a450e09e32009c5f827f4e3..7182ab684523b1fa53180c336f9e0f0a17be23ba 100644
(file)
--- a/
lunaix-os/libs/hash.c
+++ b/
lunaix-os/libs/hash.c
@@
-1,21
+1,28
@@
-#include <lib/hash.h>
+#include <klibc/hash.h>
+#include <lunaix/compiler.h>
/**
/**
- * @brief Simple string hash function
+ * @brief Simple string hash function
(sdbm)
*
*
- * ref: https://stackoverflow.com/a/7666577
+ * ref: http://www.cse.yorku.ca/~oz/hash.html
+ *
+ * sdbm has lower standard deviation in bucket distribution
+ * than djb2 (previously used) for low bucket size (16, 32).
*
* @param str
* @return unsigned int
*/
*
* @param str
* @return unsigned int
*/
-u
int32_t
-strhash_32(
unsigned char* str, uint
32_t truncate_to)
+u
32_t _weak
+strhash_32(
const char* str, u
32_t truncate_to)
{
{
- uint32_t hash = 5381;
+ if (!str)
+ return 0;
+
+ u32_t hash = 0;
int c;
int c;
- while (
c = *str++
)
- hash = (
(hash << 5) + hash) + c; /* hash * 33 + c */
+ while (
(c = *str++)
)
+ hash = (
hash << 6) + (hash << 16) + c - hash;
return hash >> (HASH_SIZE_BITS - truncate_to);
}
\ No newline at end of file
return hash >> (HASH_SIZE_BITS - truncate_to);
}
\ No newline at end of file