31 #ifndef ETL_HASH_INCLUDED
32 #define ETL_HASH_INCLUDED
42 #include "static_assert.h"
49 namespace private_hash
56 typename enable_if<
sizeof(T) ==
sizeof(uint16_t),
size_t>::type
61 return static_cast<size_t>(h ^ (h >> 16));
69 typename enable_if<
sizeof(T) ==
sizeof(uint32_t),
size_t>::type
75 #if ETL_USING_64BIT_TYPES
81 typename enable_if<
sizeof(T) ==
sizeof(uint64_t),
size_t>::type
93 template <
typename T>
struct hash;
102 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
bool),
"size_t smaller than type");
104 size_t operator ()(
bool v)
const
106 return static_cast<size_t>(v);
117 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
char),
"size_t smaller than type");
119 size_t operator ()(
char v)
const
121 return static_cast<size_t>(v);
132 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
signed char),
"size_t smaller than type");
134 size_t operator ()(
signed char v)
const
136 return static_cast<size_t>(v);
147 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
unsigned char),
"size_t smaller than type");
149 size_t operator ()(
unsigned char v)
const
151 return static_cast<size_t>(v);
162 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
wchar_t),
"size_t smaller than type");
164 size_t operator ()(
wchar_t v)
const
166 return static_cast<size_t>(v);
177 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
short),
"size_t smaller than type");
179 size_t operator ()(
short v)
const
181 return static_cast<size_t>(v);
192 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
unsigned short),
"size_t smaller than type");
194 size_t operator ()(
unsigned short v)
const
196 return static_cast<size_t>(v);
207 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
int),
"size_t smaller than type");
209 size_t operator ()(
int v)
const
211 return static_cast<size_t>(v);
222 ETL_STATIC_ASSERT(
sizeof(
size_t) >=
sizeof(
unsigned int),
"size_t smaller than type");
224 size_t operator ()(
unsigned int v)
const
226 return static_cast<size_t>(v);
237 size_t operator ()(
long v)
const
240 if (
sizeof(
size_t) >=
sizeof(v))
242 return static_cast<size_t>(v);
246 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
247 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
259 size_t operator ()(
long long v)
const
262 if (
sizeof(
size_t) >=
sizeof(v))
264 return static_cast<size_t>(v);
268 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
269 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
281 size_t operator ()(
unsigned long v)
const
284 if (
sizeof(
size_t) >=
sizeof(v))
286 return static_cast<size_t>(v);
290 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
291 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
301 struct hash<unsigned long long>
303 size_t operator ()(
unsigned long long v)
const
306 if (
sizeof(
size_t) >=
sizeof(v))
308 return static_cast<size_t>(v);
312 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
313 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
325 size_t operator ()(
float v)
const
328 if (
sizeof(
size_t) ==
sizeof(v))
342 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
343 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
355 size_t operator ()(
double v)
const
358 if (
sizeof(
size_t) ==
sizeof(v))
372 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
373 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
385 size_t operator ()(
long double v)
const
388 if (
sizeof(
size_t) ==
sizeof(v))
402 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
403 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
412 template <
typename T>
415 size_t operator ()(
const T* v)
const
418 if (
sizeof(
size_t) ==
sizeof(T*))
432 uint8_t* p =
reinterpret_cast<uint8_t*
>(&v);
433 return private_hash::generic_hash<size_t>(p, p +
sizeof(v));
ETL_CONSTEXPR TContainer::iterator begin(TContainer &container)
Definition: container.h:49
ETL_CONSTEXPR TContainer::iterator end(TContainer &container)
Definition: container.h:99
enable_if
Definition: type_traits_generator.h:1228
enable_if< sizeof(T)==sizeof(uint16_t), size_t >::type generic_hash(const uint8_t *begin, const uint8_t *end)
Definition: hash.h:57
Definition: absolute.h:37