The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#pragma once
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include "string_view/defs.h"
namespace panda { namespace hash {
uint64_t hash_murmur64a (string_view);
uint32_t hash_jenkins_one_at_a_time (string_view);
inline uint64_t hash64 (string_view v) { return hash_murmur64a(v); }
inline uint32_t hash32 (string_view v) { return hash_jenkins_one_at_a_time(v); }
namespace {
template <int T> struct _hashXX;
template <> struct _hashXX<4> { uint32_t operator() (string_view v) { return hash32(v); } };
template <> struct _hashXX<8> { uint64_t operator() (string_view v) { return hash64(v); } };
}
template <typename T = size_t> inline T hashXX (string_view);
template <> inline unsigned hashXX<unsigned> (string_view v) { return _hashXX<sizeof(unsigned)>()(v); }
template <> inline unsigned long hashXX<unsigned long> (string_view v) { return _hashXX<sizeof(unsigned long)>()(v); }
template <> inline unsigned long long hashXX<unsigned long long> (string_view v) { return _hashXX<sizeof(unsigned long long)>()(v); }
}}
#include "string_view.h"