25#if !defined(CPP_ESSENCE_HEADER_ONLY) || !CPP_ESSENCE_HEADER_ONLY
26#include "abi/string.hpp"
30#include "char8_t_remediation.hpp"
38 inline constexpr std::string_view ascii_blank_chars{U8(
" \t")};
44 using hash_type = std::hash<std::string_view>;
45 using is_transparent = void;
47 std::size_t operator()(
const char* str)
const {
48 return hash_type{}(str);
51 std::size_t operator()(std::string_view str)
const {
52 return hash_type{}(str);
55 std::size_t operator()(
const std::string& str)
const {
56 return hash_type{}(str);
64 using is_transparent = void;
66 std::size_t operator()(
const char* str)
const {
67 return (*
this)(std::string_view{str});
70 std::size_t operator()(
const std::string& str)
const {
71 return (*
this)(std::string_view{str});
74 std::size_t operator()(std::string_view value)
const {
77 std::ranges::for_each(value, [&](
char c) { hash_combine(result, to_lower(c)); });
87 constexpr bool operator()(std::string_view left, std::string_view right)
const {
88 return left.size() == right.size() && std::ranges::equal(left, right, [](
char c1,
char c2) {
89 return c1 == c2 || to_lower(c1) == to_lower(c2);
99 constexpr bool operator()(std::string_view left, std::string_view right)
const {
100 return std::ranges::lexicographical_compare(
101 left, right, [](
char c1,
char c2) {
return to_lower(c1) < to_lower(c2); });
111 constexpr std::string_view trim_left(std::string_view str, std::string_view group = ascii_blank_chars)
noexcept {
112 if (
const auto index = str.find_first_not_of(group); index != std::string_view::npos) {
113 return str.substr(index);
125 constexpr std::string_view trim_right(std::string_view str, std::string_view group = ascii_blank_chars)
noexcept {
126 return str.substr(0, str.find_last_not_of(group) + 1);
135 constexpr std::string_view trim(std::string_view str, std::string_view group = ascii_blank_chars)
noexcept {
136 return trim_right(trim_left(str, group), group);
139#if !defined(CPP_ESSENCE_HEADER_ONLY) || !CPP_ESSENCE_HEADER_ONLY
145 ES_API(CPPESSENCE) abi::string to_lower(std::string_view str);
153 ES_API(CPPESSENCE) abi::string to_upper(std::string_view str);
Checks whether the first string is lexicographically less than the second string, in a case-insensiti...
Definition string.hpp:98
A case-insensitive equality comparer for two strings.
Definition string.hpp:86
A case-insensitive hash function for const char*, std::string_view and std::string.
Definition string.hpp:63
A hash function for const char*, std::string_view and std::string.
Definition string.hpp:43