JXXON object mapper library
Hash.h
1 //
2 // Copyright (C) 2018 Dr. Michael Steffens
3 //
4 // SPDX-License-Identifier: BSL-1.0
5 //
6 
7 
8 #ifndef JXXON_Hash_INCLUDED
9 #define JXXON_Hash_INCLUDED
10 
11 #include "JXXON/IsSharedPtr.h"
12 #include <functional>
13 
14 namespace JXXON {
15 
16 template<typename T, typename Enable = void>
17 struct Hash;
18 
20 template<typename T>
21 struct Hash<T, typename std::enable_if<!IsSharedPtr<T>::value>::type>
22 {
23  std::size_t operator()(const T& arg) const
24  {
25  return std::hash<T>()(arg);
26  }
27 };
28 
30 template<typename T>
31 struct Hash<T, typename std::enable_if<IsSharedPtr<T>::value>::type>
32 {
33  std::size_t operator()(const T& ptr) const
34  {
35  return ptr ? std::hash<typename T::element_type>()(*ptr) : 0;
36  }
37 };
38 
39 } // namespace JXXON
40 
41 #endif // JXXON_Hash_INCLUDED
JXXON root namespace.
Definition: Deque.h:14
Definition: Hash.h:17