#include <stdint.h>
typedef unsigned __int128 uint128_t;
uint32_t SimpleTab32(uint32_t x, uint32_t H[4][256]) {
uint32_t i;
uint32_t h = 0;
uint8_t c;
for (i=0; i<4; i++) {
c = x;
h ^= H[i][c];
x = x >> 8;
}
return h;
}
uint32_t TwistedTab32(uint32_t x, uint64_t H[4][256]) {
uint32_t i;
uint64_t h = 0;
uint8_t c;
for (i=0; i<3; i++) {
c = x;
h ^= H[i][c];
x = x >> 8;
}
c = x^h;
h ^= H[i][c];
h >>= 32;
return ((uint32_t) h);
}
uint64_t SimpleTab64(uint64_t x, uint64_t H[8][256]) {
uint64_t i;
uint64_t h = 0;
uint8_t c;
for (i=0; i<8; i++) {
c = x;
h ^= H[i][c];
x = x >> 8;
}
return h;
}
uint64_t TwistedTab64(uint64_t x, uint128_t H[8][256]) {
uint64_t i;
uint128_t h = 0;
uint8_t c;
for (i=0; i<7; i++) {
c = x;
h ^= H[i][c];
x = x >> 8;
}
c = x^h;
h ^= H[i][c];
h >>= 64;
return ((uint64_t) h);
}