userver
C++ Async Framework
Loading...
Searching...
No Matches
cached_hash.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/utils/cached_hash.hpp
4
/// @brief @copybrief utils::CachedHash
5
6
#
include
<
functional
>
7
#
include
<
type_traits
>
8
9
USERVER_NAMESPACE_BEGIN
10
11
namespace
utils {
12
13
/// @ingroup userver_universal
14
///
15
/// @brief Holds the key and its hash for faster comparisons and hashing
16
template
<
class
Key>
17
struct
CachedHash final {
18
std::size_t hash;
19
Key key;
20
};
21
22
/// @brief Compares utils::CachedHash by hash first and then by keys
23
template
<
class
T>
24
constexpr
bool
operator
==(
const
CachedHash<T>& x,
const
CachedHash<T>& y) {
25
return
x.hash == y.hash && x.key == y.key;
26
}
27
28
/// @brief Compares utils::CachedHash by hash first and then by keys
29
template
<
class
T>
30
constexpr
bool
operator
!=(
const
CachedHash<T>& x,
const
CachedHash<T>& y) {
31
return
!(x.key == y.key);
32
}
33
34
/// @brief Compares utils::CachedHash only by keys
35
template
<
class
Equal,
class
= std::enable_if_t<!std::is_final_v<Equal>>>
36
class
CachedHashKeyEqual
:
private
Equal {
37
public
:
38
explicit
constexpr
CachedHashKeyEqual(
const
Equal& eq)
39
: Equal(eq)
40
{}
41
42
template
<
class
T>
43
constexpr
bool
operator()(
const
CachedHash<T>& x,
const
CachedHash<T>& y)
const
{
44
return
Equal::operator()(x.key, y.key);
45
}
46
};
47
48
template
<
class
Equal>
49
class
CachedHashKeyEqual
<Equal, std::false_type> {
50
public
:
51
explicit
constexpr
CachedHashKeyEqual(
const
Equal& eq)
52
: equality_(eq)
53
{}
54
55
template
<
class
T>
56
constexpr
bool
operator()(
const
CachedHash<T>& x,
const
CachedHash<T>& y)
const
{
57
return
equality_(x.key, y.key);
58
}
59
60
private
:
61
Equal equality_;
62
};
63
64
}
// namespace utils
65
66
USERVER_NAMESPACE_END
67
68
template
<
class
T>
69
struct
std::hash<USERVER_NAMESPACE::utils::CachedHash<T>> {
70
constexpr
std::size_t operator()(
const
USERVER_NAMESPACE::utils::CachedHash<T>& value)
const
noexcept
{
71
return
value.hash;
72
}
73
};
userver
utils
cached_hash.hpp
Generated on Fri Dec 5 2025 12:24:20 for userver by
Doxygen
1.13.2