1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
#include <string>
#include "StringHash.h"
#ifndef CHAR_BIT
#define CHAR_BIT 8
#else
static_assert(CHAR_BIT == 8, "");
#endif
unsigned HashString(const char* s, size_t n)
{
unsigned hash = 0;
for (size_t i = 0; (i < n || n == std::string::npos); ++i) {
if (s[i] == 0)
break;
hash += s[i];
hash ^= (hash << 7) | (hash >> (sizeof(hash) * CHAR_BIT - 7));
}
return hash;
}
static_assert(hashStringLower("abcdABCDwxyz") == hashStringLower("ABCDabcdWXYZ"), "hashStringLower does not work");
|