42#ifndef OPENSWMM_ENGINE_STRING_CASE_HPP
43#define OPENSWMM_ENGINE_STRING_CASE_HPP
52inline constexpr char ci_upper(
char c)
noexcept {
53 return (c >=
'a' && c <=
'z') ?
static_cast<char>(c & ~32) : c;
57inline bool ieq(std::string_view a, std::string_view b)
noexcept {
58 if (a.size() != b.size())
return false;
59 for (std::size_t i = 0; i < a.size(); ++i)
67 std::size_t
operator()(std::string_view s)
const noexcept {
68 std::uint64_t h = 14695981039346656037ull;
70 h ^=
static_cast<std::uint64_t
>(
71 static_cast<unsigned char>(
ci_upper(c)));
72 h *= 1099511628211ull;
74 return static_cast<std::size_t
>(h);
81 bool operator()(std::string_view a, std::string_view b)
const noexcept {
Definition NodeCoupling.cpp:16
constexpr char ci_upper(char c) noexcept
ASCII-only uppercase fold; mirrors legacy hash.c UCHAR exactly.
Definition StringCase.hpp:52
bool ieq(std::string_view a, std::string_view b) noexcept
Case-insensitive equality (ASCII fold), matching legacy samestr().
Definition StringCase.hpp:57
Transparent case-insensitive equality for unordered containers.
Definition StringCase.hpp:79
void is_transparent
Definition StringCase.hpp:80
bool operator()(std::string_view a, std::string_view b) const noexcept
Definition StringCase.hpp:81
Transparent case-insensitive hash (FNV-1a over the uppercase fold).
Definition StringCase.hpp:65
void is_transparent
Definition StringCase.hpp:66
std::size_t operator()(std::string_view s) const noexcept
Definition StringCase.hpp:67