fork download
  1. #include <iostream>
  2. #include <utility>
  3. #include <map>
  4. #include <string>
  5. #include <initializer_list>
  6. #include <cstring>
  7. #include <stdexcept>
  8.  
  9. constexpr unsigned int dbj2Hash(const char* str, size_t size, int index = 0)
  10. {return !str[index] ? 0x1505 : (dbj2Hash(str, size, index + 1) * 0x21) ^ str[index];}
  11.  
  12. // Create a literal type for short-hand case strings
  13. constexpr unsigned int operator"" _C ( const char str[], size_t size)
  14. {return dbj2Hash(str, size - 1);}
  15.  
  16. // Create a literal type for std::string
  17. unsigned int dbj2Hash(const std::string& str, int index = 0)
  18. {return dbj2Hash(str.c_str(), str.size(), index);}
  19.  
  20.  
  21. void Test(const std::string& cond)
  22. {
  23. switch(dbj2Hash(cond)) {
  24. case "Hello"_C: std::cout << "Goodbye"; break;
  25. case "World"_C: std::cout << "Planet"; break;
  26. default: std::cout << "BOGUS!";
  27. }
  28. std::cout << std::endl;
  29. }
  30.  
  31. int main()
  32. {
  33. Test("Hello");
  34. Test("World");
  35. Test("hello");
  36. }
  37.  
Success #stdin #stdout 0s 3028KB
stdin
Standard input is empty
stdout
Goodbye
Planet
BOGUS!