fork(1) download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <string.h>
  4.  
  5. #define haszero(v) (((v) - 0x0101010101010101UL) & ~(v) & 0x8080808080808080UL)
  6. /*
  7. uint64_t ct_hash(const uint64_t *ptr)
  8. {
  9.   uint64_t val = 14695981039346656037ull;
  10.  
  11.   for (size_t i=0;;++i) {
  12.   val ^= ptr[i];
  13.   val *= 1099511628211ull;
  14.   if haszero(ptr[i]) {
  15.   return val;
  16.   }
  17.   }
  18. }
  19.  
  20. uint64_t barop(const char *ptr){
  21.   uint64_t * p64 = (uint64_t*)ptr;
  22.   return haszero(* (p64))
  23.   ? * (p64)
  24.   : ct_hash(p64)
  25.   ;
  26. }
  27. */
  28. uint64_t bagor(const char *ptr){
  29. uint64_t * p64 = (uint64_t*)ptr;
  30. return haszero(* (p64))
  31. ? * (p64)
  32. : -1
  33. ;
  34. }
  35.  
  36.  
  37. #define SWITCH(ptr) \
  38.   do{ \
  39.   uint64_t Switch = (bagor(ptr)); \
  40.   const char * SwitchKey = ptr; \
  41.   if (0){
  42.  
  43. #define CASE(ptr) } else if (-1 != Switch \
  44.   ? Switch == bagor(ptr) \
  45.   : 0 == strcmp(SwitchKey, ptr) \
  46.   ){
  47. #define DEFAULT } else {
  48. #define ENDCASE } } while(0);
  49.  
  50.  
  51. void say(const char who[8]){
  52. printf("%8s says: ",who);
  53. SWITCH(who)
  54. CASE("pituh")
  55. puts("kokoko");
  56. CASE("lalka")
  57. puts("azaza");
  58. CASE("syoma")
  59. puts("rus-nya");
  60. CASE("bagor")
  61. puts("hhhrghh");
  62. CASE("korova")
  63. puts("mootools");
  64. break;
  65. puts("unreachable");
  66. CASE("Stripper Penetrator\0\0")
  67. puts("vanished");
  68. DEFAULT
  69. puts("dunno, lol");
  70. ENDCASE
  71.  
  72.  
  73. }
  74. int main()
  75. {
  76. say("syoma");
  77. say("korova");
  78. say("pituh");
  79. say("neznayka");
  80. say("Stripper Penetrator");
  81.  
  82. return 0;
  83. }
Success #stdin #stdout 0s 5540KB
stdin
Standard input is empty
stdout
   syoma says: rus-nya
  korova says: mootools
   pituh says: kokoko
neznayka says: dunno, lol
Stripper Penetrator says: vanished