#include <iostream>
#include <string>
#include <stdint.h>
/////////////////////////
// strings as case labels
//////////////////////////
constexpr uint32_t djb2Hash(const char* str, int index = 0)
{
return !str[index]
? 0x1505
: (djb2Hash(str, index + 1) * 0x21) ^ str[index];
}
// Create a literal type for short-hand case strings
constexpr unsigned int operator"" _C(
const char str[], size_t size)
{
return djb2Hash(str);
}
void Bloblawblah(const std::string& cond)
{
switch(djb2Hash(cond.c_str()))
{
case "Hello"_C: std::cout << "Goodbye"; break;
case "World"_C: std::cout << "Planet"; break;
default: std::cout << "BOGUS!";
}
std::cout << std::endl;
}
int main()
{
Bloblawblah("Hello");
Bloblawblah("World");
Bloblawblah("Error");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3RkaW50Lmg+CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIHN0cmluZ3MgYXMgY2FzZSBsYWJlbHMKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmNvbnN0ZXhwciB1aW50MzJfdCBkamIySGFzaChjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCA9IDApCnsKICAgIHJldHVybiAhc3RyW2luZGV4XQogICAgICAgID8gMHgxNTA1CiAgICAgICAgOiAoZGpiMkhhc2goc3RyLCBpbmRleCArIDEpICogMHgyMSkgXiBzdHJbaW5kZXhdOwp9CgovLyBDcmVhdGUgYSBsaXRlcmFsIHR5cGUgZm9yIHNob3J0LWhhbmQgY2FzZSBzdHJpbmdzCmNvbnN0ZXhwciB1bnNpZ25lZCBpbnQgb3BlcmF0b3IiIiBfQygKICAgIGNvbnN0IGNoYXIgc3RyW10sIHNpemVfdCBzaXplKQp7CiAgICByZXR1cm4gZGpiMkhhc2goc3RyKTsKfQoKdm9pZCBCbG9ibGF3YmxhaChjb25zdCBzdGQ6OnN0cmluZyYgY29uZCkKewogICAgc3dpdGNoKGRqYjJIYXNoKGNvbmQuY19zdHIoKSkpCiAgICB7CiAgICBjYXNlICJIZWxsbyJfQzogc3RkOjpjb3V0IDw8ICJHb29kYnllIjsgYnJlYWs7CiAgICBjYXNlICJXb3JsZCJfQzogc3RkOjpjb3V0IDw8ICJQbGFuZXQiOyBicmVhazsKICAgIGRlZmF1bHQ6IHN0ZDo6Y291dCA8PCAiQk9HVVMhIjsKICAgIH0KICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkKewogICAgQmxvYmxhd2JsYWgoIkhlbGxvIik7CiAgICBCbG9ibGF3YmxhaCgiV29ybGQiKTsKICAgIEJsb2JsYXdibGFoKCJFcnJvciIpOwp9Cgo=