Changeset 29e7cc7 in mainline for common/include/adt/hash.h
- Timestamp:
- 2025-04-18T15:14:10Z (2 months ago)
- Children:
- e77c3ed
- Parents:
- 800d188 (diff), 25fdb2d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
common/include/adt/hash.h
r800d188 r29e7cc7 108 108 } 109 109 110 /** Hash a NUL-terminated string. 111 * The algorithm may change in the future, so never use it for hashes 112 * that will be stored to a file or sent over a network. 113 */ 114 static inline size_t hash_string(const char *str) 115 { 116 /* djb2 hash + extra mixing at the end */ 117 118 char c; 119 size_t hash = 5381; 120 121 while ((c = *(str++))) 122 hash = (hash << 5) + hash + c; 123 124 return hash_mix(hash); 125 } 126 127 /** Hash an arbitrarily sized sequence of bytes. 128 * The algorithm may change in the future, so never use it for hashes 129 * that will be stored to a file or sent over a network. 130 */ 131 static inline size_t hash_bytes(const void *b, size_t len) 132 { 133 /* djb2 hash + extra mixing at the end */ 134 135 // TODO: work in bigger chunks for faster hashing 136 137 const char *str = b; 138 139 size_t hash = 5381; 140 141 for (size_t i = 0; i < len; i++) 142 hash = (hash << 5) + hash + str[i]; 143 144 return hash_mix(hash); 145 } 146 110 147 #endif
Note:
See TracChangeset
for help on using the changeset viewer.