- #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