10 #ifndef smtk_string_Token_h
11 #define smtk_string_Token_h
13 #include "smtk/common/Deprecation.h"
14 #include "smtk/string/Manager.h"
34 Token(
const char* data =
nullptr, std::size_t size = std::string::npos);
36 Token(
const std::string& data);
47 const std::string& data()
const;
50 bool operator==(
const Token& other)
const;
52 bool operator!=(
const Token& other)
const;
55 bool operator<(
const Token& other)
const;
56 bool operator>(
const Token& other)
const;
57 bool operator<=(
const Token& other)
const;
58 bool operator>=(
const Token& other)
const;
68 static constexpr uint32_t hash32a_const = 0x811c9dc5;
69 static constexpr uint32_t hash32b_const = 0x1000193;
70 static constexpr uint64_t hash64a_const = 0xcbf29ce484222325;
71 static constexpr uint64_t hash64b_const = 0x100000001b3;
77 inline static constexpr
typename std::enable_if<
sizeof(T) == 4, T>::type
78 hash_fnv1a_const(
const char* str, std::size_t size, T value) noexcept
80 return (!str || size <= 0)
82 : hash_fnv1a_const<T>(&str[1], size - 1, (value ^ uint32_t(str[0])) * hash32b_const);
86 inline static constexpr
typename std::enable_if<
sizeof(T) == 4, std::size_t>::type
94 inline static constexpr
typename std::enable_if<
sizeof(T) == 8, std::size_t>::type
95 hash_fnv1a_const(
const char* str, std::size_t size, uint64_t value) noexcept
97 return (!str || size <= 0)
99 : hash_fnv1a_const<T>(&str[1], size - 1, (value ^ uint64_t(str[0])) * hash64b_const);
103 inline static constexpr
typename std::enable_if<
sizeof(T) == 8, std::size_t>::type
106 return hash64a_const;
112 inline static constexpr
Hash stringHash(
const char* data, std::size_t size) noexcept
114 return Token::hash_fnv1a_const<std::size_t>(data, size, Token::hash_fnv1a_seed<std::size_t>());
124 static std::shared_ptr<Manager> s_manager;
127 SMTK_DEPRECATED_IN_22_11(
"Moving to smtk::string::literals namespace.")
128 inline Token operator""_token(const
char* data, std::
size_t size)
130 return Token{ data, size };
142 inline Token
operator""_token(
const char* data, std::size_t size)
144 return Token{ data, size };
147 inline constexpr
Hash operator""_hash(
const char* data, std::size_t size)
188 struct SMTKCORE_EXPORT hash<
smtk::string::Token>
194 #endif // smtk_string_Token_h