#include "strutil.h"
#include "string.h"

uintptr_t strnhash(const char* s, size_t n) {
    static const size_t shift = sizeof(uintptr_t) * 8 - 4;
    uintptr_t hash = 0;
    for(size_t i = 0; i < n; ++i) {
        hash = ((hash << 4) | s[i]) ^ (((uintptr_t)0xF << shift) & hash);
    }
    return hash;
}

uintptr_t strhash(const char* s) {
    return strnhash(s, strlen(s));
}
