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// SPDX-FileCopyrightText: Copyright (C) 2021 Tobias Hienzsch
3
4#ifndef TETL_FUNCTIONAL_HASH_HPP
5#define TETL_FUNCTIONAL_HASH_HPP
6
7#include <etl/_bit/bit_cast.hpp>
8#include <etl/_cstddef/nullptr_t.hpp>
9#include <etl/_cstddef/size_t.hpp>
10
11namespace etl {
12
13/// \brief hash
14template <typename T>
15struct hash;
16
17template <>
18struct hash<bool> {
19 [[nodiscard]] constexpr auto operator()(bool val) const noexcept -> etl::size_t
20 {
21 return static_cast<etl::size_t>(val);
22 }
23};
24
25template <>
26struct hash<char> {
27 [[nodiscard]] constexpr auto operator()(char val) const noexcept -> etl::size_t
28 {
29 return static_cast<etl::size_t>(val);
30 }
31};
32
33template <>
34struct hash<signed char> {
35 [[nodiscard]] constexpr auto operator()(signed char val) const noexcept -> etl::size_t
36 {
37 return static_cast<etl::size_t>(val);
38 }
39};
40
41template <>
42struct hash<unsigned char> {
43 [[nodiscard]] constexpr auto operator()(unsigned char val) const noexcept -> etl::size_t
44 {
45 return static_cast<etl::size_t>(val);
46 }
47};
48
49template <>
50struct hash<char8_t> {
51 [[nodiscard]] constexpr auto operator()(char8_t val) const noexcept -> etl::size_t
52 {
53 return static_cast<etl::size_t>(val);
54 }
55};
56
57template <>
58struct hash<char16_t> {
59 [[nodiscard]] constexpr auto operator()(char16_t val) const noexcept -> etl::size_t
60 {
61 return static_cast<etl::size_t>(val);
62 }
63};
64
65template <>
66struct hash<char32_t> {
67 [[nodiscard]] constexpr auto operator()(char32_t val) const noexcept -> etl::size_t
68 {
69 return static_cast<etl::size_t>(val);
70 }
71};
72
73template <>
74struct hash<wchar_t> {
75 [[nodiscard]] constexpr auto operator()(wchar_t val) const noexcept -> etl::size_t
76 {
77 return static_cast<etl::size_t>(val);
78 }
79};
80
81template <>
82struct hash<short> {
83 [[nodiscard]] constexpr auto operator()(short val) const noexcept -> etl::size_t
84 {
85 return static_cast<etl::size_t>(val);
86 }
87};
88
89template <>
90struct hash<unsigned short> {
91 [[nodiscard]] constexpr auto operator()(unsigned short val) const noexcept -> etl::size_t
92 {
93 return static_cast<etl::size_t>(val);
94 }
95};
96
97template <>
98struct hash<int> {
99 [[nodiscard]] constexpr auto operator()(int val) const noexcept -> etl::size_t
100 {
101 return static_cast<etl::size_t>(val);
102 }
103};
104
105template <>
106struct hash<unsigned int> {
107 [[nodiscard]] constexpr auto operator()(unsigned int val) const noexcept -> etl::size_t
108 {
109 return static_cast<etl::size_t>(val);
110 }
111};
112
113template <>
114struct hash<long> {
115 [[nodiscard]] constexpr auto operator()(long val) const noexcept -> etl::size_t
116 {
117 return static_cast<etl::size_t>(val);
118 }
119};
120
121template <>
122struct hash<long long> {
123 [[nodiscard]] constexpr auto operator()(long long val) const noexcept -> etl::size_t
124 {
125 return static_cast<etl::size_t>(val);
126 }
127};
128
129template <>
130struct hash<unsigned long> {
131 [[nodiscard]] constexpr auto operator()(unsigned long val) const noexcept -> etl::size_t
132 {
133 return static_cast<etl::size_t>(val);
134 }
135};
136
137template <>
138struct hash<unsigned long long> {
139 [[nodiscard]] constexpr auto operator()(unsigned long long val) const noexcept -> etl::size_t
140 {
141 return static_cast<etl::size_t>(val);
142 }
143};
144
145template <>
146struct hash<float> {
147 [[nodiscard]] constexpr auto operator()(float val) const noexcept -> etl::size_t
148 {
149 return static_cast<etl::size_t>(val);
150 }
151};
152
153template <>
154struct hash<double> {
155 [[nodiscard]] constexpr auto operator()(double val) const noexcept -> etl::size_t
156 {
157 return static_cast<etl::size_t>(val);
158 }
159};
160
161template <>
162struct hash<long double> {
163 [[nodiscard]] constexpr auto operator()(long double val) const noexcept -> etl::size_t
164 {
165 return static_cast<etl::size_t>(val);
166 }
167};
168
169template <>
170struct hash<etl::nullptr_t> {
171 [[nodiscard]] constexpr auto operator()(nullptr_t /*unused*/) const noexcept -> etl::size_t
172 {
173 return static_cast<etl::size_t>(0);
174 }
175};
176
177template <typename T>
178struct hash<T*> {
179 [[nodiscard]] auto operator()(T* val) const noexcept -> etl::size_t
180 {
181 return etl::bit_cast<etl::size_t>(val);
182 }
183};
184
185} // namespace etl
186
187#endif // TETL_FUNCTIONAL_HASH_HPP
Definition adjacent_find.hpp:9
auto operator()(T *val) const noexcept -> etl::size_t
Definition hash.hpp:179
constexpr auto operator()(bool val) const noexcept -> etl::size_t
Definition hash.hpp:19
constexpr auto operator()(char16_t val) const noexcept -> etl::size_t
Definition hash.hpp:59
constexpr auto operator()(char32_t val) const noexcept -> etl::size_t
Definition hash.hpp:67
constexpr auto operator()(char8_t val) const noexcept -> etl::size_t
Definition hash.hpp:51
constexpr auto operator()(char val) const noexcept -> etl::size_t
Definition hash.hpp:27
constexpr auto operator()(double val) const noexcept -> etl::size_t
Definition hash.hpp:155
constexpr auto operator()(nullptr_t) const noexcept -> etl::size_t
Definition hash.hpp:171
constexpr auto operator()(float val) const noexcept -> etl::size_t
Definition hash.hpp:147
constexpr auto operator()(int val) const noexcept -> etl::size_t
Definition hash.hpp:99
constexpr auto operator()(long val) const noexcept -> etl::size_t
Definition hash.hpp:115
constexpr auto operator()(long double val) const noexcept -> etl::size_t
Definition hash.hpp:163
constexpr auto operator()(long long val) const noexcept -> etl::size_t
Definition hash.hpp:123
constexpr auto operator()(short val) const noexcept -> etl::size_t
Definition hash.hpp:83
constexpr auto operator()(signed char val) const noexcept -> etl::size_t
Definition hash.hpp:35
constexpr auto operator()(unsigned char val) const noexcept -> etl::size_t
Definition hash.hpp:43
constexpr auto operator()(unsigned int val) const noexcept -> etl::size_t
Definition hash.hpp:107
constexpr auto operator()(unsigned long val) const noexcept -> etl::size_t
Definition hash.hpp:131
constexpr auto operator()(unsigned long long val) const noexcept -> etl::size_t
Definition hash.hpp:139
constexpr auto operator()(unsigned short val) const noexcept -> etl::size_t
Definition hash.hpp:91
constexpr auto operator()(wchar_t val) const noexcept -> etl::size_t
Definition hash.hpp:75