tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
hash.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_FUNCTIONAL_HASH_HPP
4#define TETL_FUNCTIONAL_HASH_HPP
5
9
10namespace etl {
11
13template <typename T>
14struct hash;
15
16template <>
17struct hash<bool> {
18 [[nodiscard]] constexpr auto operator()(bool val) const noexcept -> etl::size_t
19 {
20 return static_cast<etl::size_t>(val);
21 }
22};
23
24template <>
25struct hash<char> {
26 [[nodiscard]] constexpr auto operator()(char val) const noexcept -> etl::size_t
27 {
28 return static_cast<etl::size_t>(val);
29 }
30};
31
32template <>
33struct hash<signed char> {
34 [[nodiscard]] constexpr auto operator()(signed char val) const noexcept -> etl::size_t
35 {
36 return static_cast<etl::size_t>(val);
37 }
38};
39
40template <>
41struct hash<unsigned char> {
42 [[nodiscard]] constexpr auto operator()(unsigned char val) const noexcept -> etl::size_t
43 {
44 return static_cast<etl::size_t>(val);
45 }
46};
47
48template <>
49struct hash<char8_t> {
50 [[nodiscard]] constexpr auto operator()(char8_t val) const noexcept -> etl::size_t
51 {
52 return static_cast<etl::size_t>(val);
53 }
54};
55
56template <>
57struct hash<char16_t> {
58 [[nodiscard]] constexpr auto operator()(char16_t val) const noexcept -> etl::size_t
59 {
60 return static_cast<etl::size_t>(val);
61 }
62};
63
64template <>
65struct hash<char32_t> {
66 [[nodiscard]] constexpr auto operator()(char32_t val) const noexcept -> etl::size_t
67 {
68 return static_cast<etl::size_t>(val);
69 }
70};
71
72template <>
73struct hash<wchar_t> {
74 [[nodiscard]] constexpr auto operator()(wchar_t val) const noexcept -> etl::size_t
75 {
76 return static_cast<etl::size_t>(val);
77 }
78};
79
80template <>
81struct hash<short> {
82 [[nodiscard]] constexpr auto operator()(short val) const noexcept -> etl::size_t
83 {
84 return static_cast<etl::size_t>(val);
85 }
86};
87
88template <>
89struct hash<unsigned short> {
90 [[nodiscard]] constexpr auto operator()(unsigned short val) const noexcept -> etl::size_t
91 {
92 return static_cast<etl::size_t>(val);
93 }
94};
95
96template <>
97struct hash<int> {
98 [[nodiscard]] constexpr auto operator()(int val) const noexcept -> etl::size_t
99 {
100 return static_cast<etl::size_t>(val);
101 }
102};
103
104template <>
105struct hash<unsigned int> {
106 [[nodiscard]] constexpr auto operator()(unsigned int val) const noexcept -> etl::size_t
107 {
108 return static_cast<etl::size_t>(val);
109 }
110};
111
112template <>
113struct hash<long> {
114 [[nodiscard]] constexpr auto operator()(long val) const noexcept -> etl::size_t
115 {
116 return static_cast<etl::size_t>(val);
117 }
118};
119
120template <>
121struct hash<long long> {
122 [[nodiscard]] constexpr auto operator()(long long val) const noexcept -> etl::size_t
123 {
124 return static_cast<etl::size_t>(val);
125 }
126};
127
128template <>
129struct hash<unsigned long> {
130 [[nodiscard]] constexpr auto operator()(unsigned long val) const noexcept -> etl::size_t
131 {
132 return static_cast<etl::size_t>(val);
133 }
134};
135
136template <>
137struct hash<unsigned long long> {
138 [[nodiscard]] constexpr auto operator()(unsigned long long val) const noexcept -> etl::size_t
139 {
140 return static_cast<etl::size_t>(val);
141 }
142};
143
144template <>
145struct hash<float> {
146 [[nodiscard]] constexpr auto operator()(float val) const noexcept -> etl::size_t
147 {
148 return static_cast<etl::size_t>(val);
149 }
150};
151
152template <>
153struct hash<double> {
154 [[nodiscard]] constexpr auto operator()(double val) const noexcept -> etl::size_t
155 {
156 return static_cast<etl::size_t>(val);
157 }
158};
159
160template <>
161struct hash<long double> {
162 [[nodiscard]] constexpr auto operator()(long double val) const noexcept -> etl::size_t
163 {
164 return static_cast<etl::size_t>(val);
165 }
166};
167
168template <>
170 [[nodiscard]] constexpr auto operator()(nullptr_t /*unused*/) const noexcept -> etl::size_t
171 {
172 return static_cast<etl::size_t>(0);
173 }
174};
175
176template <typename T>
177struct hash<T*> {
178 [[nodiscard]] auto operator()(T* val) const noexcept -> etl::size_t { return etl::bit_cast<etl::size_t>(val); }
179};
180
181} // namespace etl
182
183#endif // TETL_FUNCTIONAL_HASH_HPP
constexpr auto bit_cast(From const &src) noexcept -> To
Obtain a value of type To by reinterpreting the object representation of from. Every bit in the value...
Definition bit_cast.hpp:38
Definition adjacent_find.hpp:8
TETL_BUILTIN_SIZET size_t
etl::size_t is the unsigned integer type of the result of the sizeof operator.
Definition size_t.hpp:14
decltype(nullptr) nullptr_t
etl::nullptr_t is the type of the null pointer literal, nullptr. It is a distinct type that is not it...
Definition nullptr_t.hpp:13
auto operator()(T *val) const noexcept -> etl::size_t
Definition hash.hpp:178
constexpr auto operator()(bool val) const noexcept -> etl::size_t
Definition hash.hpp:18
constexpr auto operator()(char16_t val) const noexcept -> etl::size_t
Definition hash.hpp:58
constexpr auto operator()(char32_t val) const noexcept -> etl::size_t
Definition hash.hpp:66
constexpr auto operator()(char8_t val) const noexcept -> etl::size_t
Definition hash.hpp:50
constexpr auto operator()(char val) const noexcept -> etl::size_t
Definition hash.hpp:26
constexpr auto operator()(double val) const noexcept -> etl::size_t
Definition hash.hpp:154
constexpr auto operator()(nullptr_t) const noexcept -> etl::size_t
Definition hash.hpp:170
constexpr auto operator()(float val) const noexcept -> etl::size_t
Definition hash.hpp:146
constexpr auto operator()(int val) const noexcept -> etl::size_t
Definition hash.hpp:98
constexpr auto operator()(long val) const noexcept -> etl::size_t
Definition hash.hpp:114
constexpr auto operator()(long double val) const noexcept -> etl::size_t
Definition hash.hpp:162
constexpr auto operator()(long long val) const noexcept -> etl::size_t
Definition hash.hpp:122
constexpr auto operator()(short val) const noexcept -> etl::size_t
Definition hash.hpp:82
constexpr auto operator()(signed char val) const noexcept -> etl::size_t
Definition hash.hpp:34
constexpr auto operator()(unsigned char val) const noexcept -> etl::size_t
Definition hash.hpp:42
constexpr auto operator()(unsigned int val) const noexcept -> etl::size_t
Definition hash.hpp:106
constexpr auto operator()(unsigned long val) const noexcept -> etl::size_t
Definition hash.hpp:130
constexpr auto operator()(unsigned long long val) const noexcept -> etl::size_t
Definition hash.hpp:138
constexpr auto operator()(unsigned short val) const noexcept -> etl::size_t
Definition hash.hpp:90
constexpr auto operator()(wchar_t val) const noexcept -> etl::size_t
Definition hash.hpp:74
hash
Definition hash.hpp:14