#define FARMHASH_INTERFACE(name) namespace name {                                        \
    uint32_t Hash32(const char* s, size_t len);                                          \
    uint32_t Hash32WithSeed(const char* s, size_t len, uint32_t seed);                   \
    uint64_t Hash64(const char* s, size_t len);                                          \
    uint64_t Hash64WithSeed(const char* s, size_t len, uint64_t seed);                   \
    uint64_t Hash64WithSeeds(const char* s, size_t len, uint64_t seed0, uint64_t seed1); \
    uint128_t Hash128(const char* s, size_t len);                                        \
    uint128_t Hash128WithSeed(const char* s, size_t len, uint128_t seed);                \
}

namespace farmhashcc {
    uint32_t Fingerprint32(const char* s, size_t len);
    uint64_t Fingerprint64(const char* s, size_t len);
    uint128_t Fingerprint128(const char* s, size_t len);
    uint128_t CityHash128WithSeed(const char* s, size_t len, uint128_t seed);
}

FARMHASH_INTERFACE(farmhashcc)
FARMHASH_INTERFACE(farmhashsa)
FARMHASH_INTERFACE(farmhashsu)
FARMHASH_INTERFACE(farmhashmk)
FARMHASH_INTERFACE(farmhashnt)
FARMHASH_INTERFACE(farmhashte)
FARMHASH_INTERFACE(farmhashxo)
FARMHASH_INTERFACE(farmhashuo)
FARMHASH_INTERFACE(farmhashna)

#undef FARMHASH_INTERFACE