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