packages feed

hashable-1.1.0.0: cbits/hashByteString.c

/* Bernstein's hash */
long djb_hash(const unsigned char* str, long len, long hash) {

  while (len--) {
    hash = (hash * 33) ^ *str++;
  }

  return hash;
}

/* Used for ByteArray#s. We can't treat them like pointers in
   native Haskell, but we can in unsafe FFI calls.
 */
long djb_hash_offset(const unsigned char* str, long offset, long len, long hash) {
  return djb_hash(str + offset, len, hash);
}