Kurlyk
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
8namespace 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
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
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
59namespace kurlyk {
60
63
66
69
70} // namespace kurlyk
71
72#endif // _KURLYK_UTILS_CASE_INSENSITIVE_MULTIMAP_HPP_INCLUDED
Functor for case-insensitive string comparison.
bool operator()(const std::string &str1, const std::string &str2) const noexcept
Compares two strings case-insensitively.
Functor for generating case-insensitive hash values for strings.
std::size_t operator()(const std::string &str) const noexcept
Computes a case-insensitive hash value for a given string.
std::unordered_multimap< std::string, std::string, CaseInsensitiveHash, CaseInsensitiveEqual > CaseInsensitiveMultimap
A case-insensitive unordered multimap for storing HTTP headers.
bool case_insensitive_equal(const std::string &str1, const std::string &str2) noexcept
Compares two strings case-insensitively.
std::unordered_multimap< std::string, Cookie, CaseInsensitiveHash, CaseInsensitiveEqual > CaseInsensitiveCookieMultimap
A case-insensitive unordered multimap specifically for storing HTTP cookies.
Primary namespace for the Kurlyk library, encompassing initialization, request management,...
utils::CaseInsensitiveMultimap Headers
Alias for HTTP headers, providing a case-insensitive unordered multimap.
utils::CaseInsensitiveCookieMultimap Cookies
Alias for HTTP cookies, stored case-insensitively.
utils::CaseInsensitiveMultimap QueryParams
Alias for query parameters in HTTP requests, stored case-insensitively.