9#include "plg/string.hpp"
14 auto operator()(
const std::filesystem::path& path)
const noexcept {
22 auto operator()(
const char*
txt)
const {
23 return std::hash<std::string_view>{}(
txt);
26 auto operator()(std::string_view
txt)
const {
27 return std::hash<std::string_view>{}(
txt);
30 auto operator()(
const std::string&
txt)
const {
31 return std::hash<std::string>{}(
txt);
35 return std::hash<plg::string>{}(
txt);
40 template <std::
size_t Size>
45 static constexpr std::size_t fnv_basis = 0x811C9DC5u;
46 static constexpr std::size_t fnv_prime = 0x01000193u;
47 static constexpr std::size_t golden_ratio = 0x9e3779b9u;
52 static constexpr std::size_t fnv_basis = 0xcbf29ce484222325ULL;
53 static constexpr std::size_t fnv_prime = 0x100000001b3ULL;
54 static constexpr std::size_t golden_ratio = 0x9e3779b97f4a7c15ULL;
63 std::size_t operator()(
const T& str)
const noexcept {
64 std::size_t
hash = active_hash_traits::fnv_basis;
65 for (
const auto&
c : str) {
66 hash ^=
static_cast<std::size_t
>(std::tolower(
c));
67 hash *= active_hash_traits::fnv_prime;
76 template <
typename T1,
typename T2>
77 bool operator()(
const T1&
lhs,
const T2& rhs)
const noexcept {
78 return std::lexicographical_compare(
80 rhs.begin(), rhs.end(),
81 [](
const auto&
ac,
const auto&
bc) {
82 return std::tolower(ac) < std::tolower(bc);
88 inline void hash_combine(
size_t&) {
92 inline void hash_combine(std::size_t& seed,
const T& v) {
94 seed ^= hasher(v) + active_hash_traits::golden_ratio + (seed << 6) + (seed >> 2);
97 template <
class... Ts>
98 inline std::size_t hash_combine_all(
const Ts&... args) {
100 (hash_combine(seed, args), ...);
104 template <
typename T1,
typename T2>
106 size_t operator()(
const std::pair<T1, T2>&
p)
const {
107 return hash_combine_all(
p.first,
p.second);