42#ifndef OPENSWMM_ENGINE_STRING_CASE_HPP
43#define OPENSWMM_ENGINE_STRING_CASE_HPP
57inline constexpr char ci_upper(
char c)
noexcept {
58 return (c >=
'a' && c <=
'z') ?
static_cast<char>(c & ~32) : c;
70inline bool ieq(std::string_view a, std::string_view b)
noexcept {
71 if (a.size() != b.size())
73 for (std::size_t i = 0; i < a.size(); ++i)
90 std::size_t
operator()(std::string_view s)
const noexcept {
91 std::uint64_t h = 14695981039346656037ull;
93 h ^=
static_cast<std::uint64_t
>(
static_cast<unsigned char>(
ci_upper(c)));
94 h *= 1099511628211ull;
96 return static_cast<std::size_t
>(h);
110 bool operator()(std::string_view a, std::string_view b)
const noexcept {
return ieq(a, b); }
Definition ExchangeLaw.hpp:60
constexpr char ci_upper(char c) noexcept
Fold one ASCII lowercase letter to uppercase without locale rules.
Definition StringCase.hpp:57
bool ieq(std::string_view a, std::string_view b) noexcept
Compare two byte sequences using the legacy ASCII uppercase fold.
Definition StringCase.hpp:70
Transparent case-insensitive equality for unordered containers.
Definition StringCase.hpp:101
void is_transparent
Definition StringCase.hpp:102
bool operator()(std::string_view a, std::string_view b) const noexcept
Compare heterogeneous container keys with legacy name equality.
Definition StringCase.hpp:110
Transparent case-insensitive hash (FNV-1a over the uppercase fold).
Definition StringCase.hpp:80
void is_transparent
Definition StringCase.hpp:81
std::size_t operator()(std::string_view s) const noexcept
Hash borrowed bytes using 64-bit FNV-1a after ASCII uppercase folding.
Definition StringCase.hpp:90