Kurlyk
Toggle main menu visibility
Loading...
Searching...
No Matches
CaseInsensitiveMultimap.hpp
Go to the documentation of this file.
1
#pragma once
2
#ifndef _KURLYK_UTILS_CASE_INSENSITIVE_MULTIMAP_HPP_INCLUDED
3
#define _KURLYK_UTILS_CASE_INSENSITIVE_MULTIMAP_HPP_INCLUDED
4
7
8
namespace
kurlyk::utils
{
9
14
inline
bool
case_insensitive_equal
(
const
std::string& str1,
const
std::string& str2)
noexcept
{
15
return
str1.size() == str2.size() &&
16
std::equal(str1.begin(), str1.end(), str2.begin(), [](
char
a,
char
b) {
17
return tolower(a) == tolower(b);
18
});
19
}
20
23
class
CaseInsensitiveEqual
{
24
public
:
29
bool
operator()
(
const
std::string& str1,
const
std::string& str2)
const
noexcept
{
30
return
case_insensitive_equal
(str1, str2);
31
}
32
};
33
36
class
CaseInsensitiveHash
{
37
public
:
41
std::size_t
operator()
(
const
std::string& str)
const
noexcept
{
42
std::size_t h = 0;
43
std::hash<int> hash;
44
for
(
auto
c : str) {
45
h ^= hash(tolower(c)) + 0x9e3779b9 + (h << 6) + (h >> 2);
46
}
47
return
h;
48
}
49
};
50
52
using
CaseInsensitiveMultimap
= std::unordered_multimap<std::string, std::string, CaseInsensitiveHash, CaseInsensitiveEqual>;
53
55
using
CaseInsensitiveCookieMultimap
= std::unordered_multimap<std::string, Cookie, CaseInsensitiveHash, CaseInsensitiveEqual>;
56
57
}
// namespace kurlyk::utils
58
59
namespace
kurlyk
{
60
62
using
Headers
=
utils::CaseInsensitiveMultimap
;
63
65
using
QueryParams
=
utils::CaseInsensitiveMultimap
;
66
68
using
Cookies
=
utils::CaseInsensitiveCookieMultimap
;
69
70
}
// namespace kurlyk
71
72
#endif
// _KURLYK_UTILS_CASE_INSENSITIVE_MULTIMAP_HPP_INCLUDED
kurlyk::utils::CaseInsensitiveEqual
Functor for case-insensitive string comparison.
Definition
CaseInsensitiveMultimap.hpp:23
kurlyk::utils::CaseInsensitiveEqual::operator()
bool operator()(const std::string &str1, const std::string &str2) const noexcept
Compares two strings case-insensitively.
Definition
CaseInsensitiveMultimap.hpp:29
kurlyk::utils::CaseInsensitiveHash
Functor for generating case-insensitive hash values for strings.
Definition
CaseInsensitiveMultimap.hpp:36
kurlyk::utils::CaseInsensitiveHash::operator()
std::size_t operator()(const std::string &str) const noexcept
Computes a case-insensitive hash value for a given string.
Definition
CaseInsensitiveMultimap.hpp:41
kurlyk::utils
Definition
Base64Url.hpp:13
kurlyk::utils::CaseInsensitiveMultimap
std::unordered_multimap< std::string, std::string, CaseInsensitiveHash, CaseInsensitiveEqual > CaseInsensitiveMultimap
A case-insensitive unordered multimap for storing HTTP headers.
Definition
CaseInsensitiveMultimap.hpp:52
kurlyk::utils::case_insensitive_equal
bool case_insensitive_equal(const std::string &str1, const std::string &str2) noexcept
Compares two strings case-insensitively.
Definition
CaseInsensitiveMultimap.hpp:14
kurlyk::utils::CaseInsensitiveCookieMultimap
std::unordered_multimap< std::string, Cookie, CaseInsensitiveHash, CaseInsensitiveEqual > CaseInsensitiveCookieMultimap
A case-insensitive unordered multimap specifically for storing HTTP cookies.
Definition
CaseInsensitiveMultimap.hpp:55
kurlyk
Primary namespace for the Kurlyk library, encompassing initialization, request management,...
kurlyk::Headers
utils::CaseInsensitiveMultimap Headers
Alias for HTTP headers, providing a case-insensitive unordered multimap.
Definition
CaseInsensitiveMultimap.hpp:62
kurlyk::Cookies
utils::CaseInsensitiveCookieMultimap Cookies
Alias for HTTP cookies, stored case-insensitively.
Definition
CaseInsensitiveMultimap.hpp:68
kurlyk::QueryParams
utils::CaseInsensitiveMultimap QueryParams
Alias for query parameters in HTTP requests, stored case-insensitively.
Definition
CaseInsensitiveMultimap.hpp:65
include
kurlyk
utils
CaseInsensitiveMultimap.hpp
Generated by
1.17.0