Kurlyk
Toggle main menu visibility
Loading...
Searching...
No Matches
CaseInsensitiveMultimap.hpp
Go to the documentation of this file.
1
#pragma once
2
#ifndef KURLYK_HEADER_KURLYK_UTILS_CASE_INSENSITIVE_MULTIMAP_HPP_INCLUDED
3
#define KURLYK_HEADER_KURLYK_UTILS_CASE_INSENSITIVE_MULTIMAP_HPP_INCLUDED
4
7
8
namespace
kurlyk
{
9
namespace
utils {
10
15
inline
bool
case_insensitive_equal
(
const
std::string& str1,
const
std::string& str2)
noexcept
{
16
return
str1.size() == str2.size() &&
17
std::equal(str1.begin(), str1.end(), str2.begin(), [](
char
a,
char
b) {
18
return tolower(a) == tolower(b);
19
});
20
}
21
24
class
CaseInsensitiveEqual
{
25
public
:
30
bool
operator()
(
const
std::string& str1,
const
std::string& str2)
const
noexcept
{
31
return
case_insensitive_equal
(str1, str2);
32
}
33
};
34
37
class
CaseInsensitiveHash
{
38
public
:
42
std::size_t
operator()
(
const
std::string& str)
const
noexcept
{
43
std::size_t h = 0;
44
std::hash<int> hash;
45
for
(
auto
c : str) {
46
h ^= hash(tolower(c)) + 0x9e3779b9 + (h << 6) + (h >> 2);
47
}
48
return
h;
49
}
50
};
51
53
using
CaseInsensitiveMultimap
= std::unordered_multimap<std::string, std::string, CaseInsensitiveHash, CaseInsensitiveEqual>;
54
56
using
CaseInsensitiveCookieMultimap
= std::unordered_multimap<std::string, Cookie, CaseInsensitiveHash, CaseInsensitiveEqual>;
57
58
}
// namespace utils
59
}
// namespace kurlyk
60
61
namespace
kurlyk
{
62
64
using
Headers
=
utils::CaseInsensitiveMultimap
;
65
67
using
QueryParams
=
utils::CaseInsensitiveMultimap
;
68
70
using
Cookies
=
utils::CaseInsensitiveCookieMultimap
;
71
72
}
// namespace kurlyk
73
74
#endif
// KURLYK_HEADER_KURLYK_UTILS_CASE_INSENSITIVE_MULTIMAP_HPP_INCLUDED
kurlyk::utils::CaseInsensitiveEqual
Functor for case-insensitive string comparison.
Definition
CaseInsensitiveMultimap.hpp:24
kurlyk::utils::CaseInsensitiveEqual::operator()
bool operator()(const std::string &str1, const std::string &str2) const noexcept
Compares two strings case-insensitively.
Definition
CaseInsensitiveMultimap.hpp:30
kurlyk::utils::CaseInsensitiveHash
Functor for generating case-insensitive hash values for strings.
Definition
CaseInsensitiveMultimap.hpp:37
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:42
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:53
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:15
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:56
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:64
kurlyk::Cookies
utils::CaseInsensitiveCookieMultimap Cookies
Alias for HTTP cookies, stored case-insensitively.
Definition
CaseInsensitiveMultimap.hpp:70
kurlyk::QueryParams
utils::CaseInsensitiveMultimap QueryParams
Alias for query parameters in HTTP requests, stored case-insensitively.
Definition
CaseInsensitiveMultimap.hpp:67
include
kurlyk
utils
CaseInsensitiveMultimap.hpp
Generated by
1.17.0