#include <iostream>
#include <utility>
#include <map>
#include <string>
#include <initializer_list>
#include <cstring>
#include <stdexcept>
constexpr unsigned int dbj2Hash(const char* str, size_t size, int index = 0)
{return !str[index] ? 0x1505 : (dbj2Hash(str, size, 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 dbj2Hash(str, size - 1);}
// Create a literal type for std::string
unsigned int dbj2Hash(const std::string& str, int index = 0)
{return dbj2Hash(str.c_str(), str.size(), index);}
void Test(const std::string& cond)
{
switch(dbj2Hash(cond)) {
case "Hello"_C: std::cout << "Goodbye"; break;
case "World"_C: std::cout << "Planet"; break;
default: std::cout << "BOGUS!";
}
std::cout << std::endl;
}
int main()
{
Test("Hello");
Test("World");
Test("hello");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8c3RkZXhjZXB0PgoKY29uc3RleHByIHVuc2lnbmVkIGludCBkYmoySGFzaChjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBzaXplLCBpbnQgaW5kZXggPSAwKQp7cmV0dXJuICFzdHJbaW5kZXhdID8gMHgxNTA1IDogKGRiajJIYXNoKHN0ciwgc2l6ZSwgaW5kZXggKyAxKSAqIDB4MjEpIF4gc3RyW2luZGV4XTt9CgovLyBDcmVhdGUgYSBsaXRlcmFsIHR5cGUgZm9yIHNob3J0LWhhbmQgY2FzZSBzdHJpbmdzCmNvbnN0ZXhwciB1bnNpZ25lZCBpbnQgb3BlcmF0b3IiIiBfQyAoIGNvbnN0IGNoYXIgc3RyW10sIHNpemVfdCBzaXplKQp7cmV0dXJuIGRiajJIYXNoKHN0ciwgc2l6ZSAtIDEpO30KCi8vIENyZWF0ZSBhIGxpdGVyYWwgdHlwZSBmb3Igc3RkOjpzdHJpbmcKdW5zaWduZWQgaW50IGRiajJIYXNoKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIGludCBpbmRleCA9IDApCntyZXR1cm4gZGJqMkhhc2goc3RyLmNfc3RyKCksIHN0ci5zaXplKCksIGluZGV4KTt9CgoKdm9pZCBUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25kKQp7CiAgICBzd2l0Y2goZGJqMkhhc2goY29uZCkpIHsKICAgIGNhc2UgIkhlbGxvIl9DOiBzdGQ6OmNvdXQgPDwgIkdvb2RieWUiOyBicmVhazsKICAgIGNhc2UgIldvcmxkIl9DOiBzdGQ6OmNvdXQgPDwgIlBsYW5ldCI7IGJyZWFrOwogICAgZGVmYXVsdDogc3RkOjpjb3V0IDw8ICJCT0dVUyEiOwogICAgfQogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKQp7CiAgICBUZXN0KCJIZWxsbyIpOwogICAgVGVzdCgiV29ybGQiKTsKICAgIFRlc3QoImhlbGxvIik7Cn0K