#include <stdio.h>
#include <stdint.h> 
#include <string.h>

#define haszero(v) (((v) - 0x0101010101010101UL) & ~(v) & 0x8080808080808080UL)
/*
uint64_t ct_hash(const uint64_t *ptr)
{
    uint64_t val = 14695981039346656037ull;
    
    for (size_t i=0;;++i) {
        val ^= ptr[i];
        val *= 1099511628211ull;
        if haszero(ptr[i]) {
            return val;
        }
    }
}

uint64_t barop(const char *ptr){
    uint64_t * p64 = (uint64_t*)ptr;
     return haszero(* (p64)) 
        ? * (p64)
        : ct_hash(p64)
     ;
}
*/
uint64_t bagor(const char *ptr){
    uint64_t * p64 = (uint64_t*)ptr;
     return haszero(* (p64)) 
        ? * (p64)
        : -1
     ;
}


#define SWITCH(ptr)                     \
    do{                                 \
    uint64_t Switch = (bagor(ptr));     \
    const char * SwitchKey = ptr;       \
    if (0){ 
    
#define CASE(ptr) } else if (-1 != Switch                       \
                ?    Switch == bagor(ptr)                       \
                :    0 == strcmp(SwitchKey, ptr)                \
                 ){
#define DEFAULT } else {
#define ENDCASE } } while(0);


void say(const char who[8]){
    printf("%8s says: ",who); 
    SWITCH(who) 
    CASE("pituh") 
        puts("kokoko"); 
    CASE("lalka")
         puts("azaza");
    CASE("syoma")
         puts("rus-nya");
    CASE("bagor")
         puts("hhhrghh");
    CASE("korova")
         puts("mootools");
         break;
         puts("unreachable");
    CASE("Stripper Penetrator\0\0")
         puts("vanished");
    DEFAULT
        puts("dunno, lol");
    ENDCASE

    
}
int main()
{
    say("syoma");
    say("korova");
    say("pituh");
    say("neznayka");
    say("Stripper Penetrator");    

    return 0;
}