#include <iostream>
using namespace std;
constexpr unsigned long djb2_hash_impl( const char* text, unsigned long prev_hash )
{
return text[0] == '\0' ? prev_hash : djb2_hash_impl( &text[1], prev_hash * 33 ^ static_cast<unsigned long>(text[0]) );
}
constexpr unsigned long djb2_hash( const char* text )
{
return djb2_hash_impl( text, 5381 );
}
enum EXAMPLE
{
VAL = djb2_hash( "Hello World" )
};
int main() {
auto hello_hash = djb2_hash( "Hello World" );
switch( hello_hash )
{
case djb2_hash( "Hello World" ):
cout << "Hash matched with value " << hello_hash << endl;
break;
default:
cout << "Hash did not match" << endl;
}
cout << "And the enum has value of " << VAL << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3RleHByIHVuc2lnbmVkIGxvbmcgZGpiMl9oYXNoX2ltcGwoIGNvbnN0IGNoYXIqIHRleHQsIHVuc2lnbmVkIGxvbmcgcHJldl9oYXNoICkKewogICAgcmV0dXJuIHRleHRbMF0gPT0gJ1wwJyA/IHByZXZfaGFzaCA6IGRqYjJfaGFzaF9pbXBsKCAmdGV4dFsxXSwgcHJldl9oYXNoICogMzMgXiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPih0ZXh0WzBdKSApOwp9Cgpjb25zdGV4cHIgdW5zaWduZWQgbG9uZyBkamIyX2hhc2goIGNvbnN0IGNoYXIqIHRleHQgKQp7CiAgICByZXR1cm4gZGpiMl9oYXNoX2ltcGwoIHRleHQsIDUzODEgKTsKfQoKZW51bSBFWEFNUExFCnsKCVZBTCA9IGRqYjJfaGFzaCggIkhlbGxvIFdvcmxkIiApCn07CgppbnQgbWFpbigpIHsKICAgIGF1dG8gaGVsbG9faGFzaCA9IGRqYjJfaGFzaCggIkhlbGxvIFdvcmxkIiApOwoKICAgIHN3aXRjaCggaGVsbG9faGFzaCApCiAgICB7CiAgICAgICAgY2FzZSBkamIyX2hhc2goICJIZWxsbyBXb3JsZCIgKToKICAgICAgICAgICAgY291dCA8PCAiSGFzaCBtYXRjaGVkIHdpdGggdmFsdWUgIiA8PCBoZWxsb19oYXNoIDw8IGVuZGw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGNvdXQgPDwgIkhhc2ggZGlkIG5vdCBtYXRjaCIgPDwgZW5kbDsKICAgIH0KICAgIAogICAgY291dCA8PCAiQW5kIHRoZSBlbnVtIGhhcyB2YWx1ZSBvZiAiIDw8IFZBTCA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=