Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • common/include/adt/hash.h

    r0db0df2 rad9178bf  
    108108}
    109109
    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 
    147110#endif
Note: See TracChangeset for help on using the changeset viewer.