개발하는 리프터 꽃게맨입니다.

컴파일 타임 문자열 해싱 본문

알고리즘

컴파일 타임 문자열 해싱

파워꽃게맨 2024. 9. 25. 16:13

#include <iostream>
using namespace std;

template<std::size_t N>
struct StringHashHelper
{
	char String[N];
	size_t Hash;
	size_t Size = N;

	constexpr StringHashHelper(const char(&str)[N])
	{
		for (size_t i = 0; i < N; ++i)
		{
			String[i] = str[i];
		}
		Hash = FNV1a(String, N - 1);
	}

	constexpr size_t FNV1a(const char* str, size_t length, size_t hash = 0x811C9DC5) const
	{
		return length == 0 ? hash : FNV1a(&str[1], length - 1, (hash ^ str[0]) * 0x01000193);
	}
};

template<StringHashHelper Helper>
struct StringHash
{
	char String[Helper.Size];
	size_t Hash = Helper.Hash;

	constexpr StringHash()
	{
		for (size_t i = 0; i < Helper.Size; ++i)
		{
			String[i] = Helper.String[i];
		}
	}
};

int main()
{

	return 0;
}