qxLib
string_hash.inl
Go to the documentation of this file.
1 /**
2 
3  @file string_hash.inl
4  @author Khrapov
5  @date 18.08.2021
6  @copyright © Nick Khrapov, 2021. All right reserved.
7 
8 **/
9 
10 namespace qx
11 {
12 
13 // ----------------------------- basic_string_hash -----------------------------
14 
15 template<class traits_t>
16 constexpr basic_string_hash<traits_t>::basic_string_hash(const_pointer pszString, size_type nSize) noexcept
17  : m_nHash(traits_t::hash_function(pszString, traits_t::hash_seed(), nSize))
18 {
19 }
20 
21 template<class traits_t>
22 constexpr basic_string_hash<traits_t>::basic_string_hash(const_pointer pszString) noexcept
23 {
24  if constexpr (details::has_zero_termonated_hash_func_overload<traits_t>)
25  {
26  m_nHash = traits_t::hash_function(pszString, traits_t::hash_seed());
27  }
28  else
29  {
30  m_nHash = traits_t::hash_function(pszString, traits_t::hash_seed(), traits_t::length(pszString));
31  }
32 }
33 
34 template<class traits_t>
35 template<range_of_t_c<typename traits_t::value_type> string_t>
36 constexpr basic_string_hash<traits_t>::basic_string_hash(const string_t& sString) noexcept
37  : m_nHash(traits_t::hash_function(sString.data(), traits_t::hash_seed(), sString.size()))
38 {
39 }
40 
41 template<class traits_t>
42 constexpr basic_string_hash<traits_t>::operator size_t() const noexcept
43 {
44  return m_nHash;
45 }
46 
47 
48 
49 // ------------------------------- operator"" _sh ------------------------------
50 
51 namespace literals
52 {
53 
54 constexpr basic_string_hash<string_traits::traits<char>> operator"" _sh(const char* pszStr, size_t nSize)
55 {
56  return basic_string_hash<string_traits::traits<char>>(pszStr, nSize);
57 }
58 
59 constexpr basic_string_hash<string_traits::traits<wchar_t>> operator"" _sh(const wchar_t* pszStr, size_t nSize)
60 {
62 }
63 
64 } // namespace literals
65 
66 } // namespace qx
67 
68 
69 
70 // --------------------------------- std::hash ---------------------------------
71 
72 namespace std
73 {
74 
75 template<class traits_t>
76 struct hash<qx::basic_string_hash<traits_t>>
77 {
78  size_t operator()(const qx::basic_string_hash<traits_t>& hash) const
79  {
80  return hash;
81  }
82 };
83 
84 } // namespace std
String hash object.
Definition: string_hash.h:38