私はカーネルモジュールを作成しています。このモジュールでは、あらかじめ定義された文字列に対して入力をチェックする必要があります。 C++では、コンパイル時にハッシュを計算するconstexpr関数を作成することができます。私はいくつかの擬似コードはthe Jenkins hash functionを使用してC.CのConst式 - 文字列をハッシュする方法は?
でそれをする方法を探しています:
u32 hash(const char *key)
{
u32 hash, i;
size_t len;
len = strlen(key);
for(hash = i = 0; i < len; ++i)
{
hash += key[i];
hash += (hash << 10);
hash ^= (hash >> 6);
}
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
return hash;
}
const u32 myStringList [] = {
hash("hello"),
hash("this is a text"),
hash("good morning")
};
int findString(const char * searchStr) {
u32 h;
int i;
h = hash(searchStr);
for (i = 0; i < sizeof(myStringList)/sizeof(const u32); i++) {
if (h == myStringList[i]) return i;
}
return -1;
}
どのように仕事を得るためにそれを修正しますか?