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;
54 bool operator==(
const Token& other)
const;
56 bool operator!=(
const Token& other)
const;
59 bool operator<(
const Token& other)
const;
60 bool operator>(
const Token& other)
const;
61 bool operator<=(
const Token& other)
const;
62 bool operator>=(
const Token& other)
const;
72 static constexpr uint32_t hash32a_const = 0x811c9dc5;
73 static constexpr uint32_t hash32b_const = 0x1000193;
74 static constexpr uint64_t hash64a_const = 0xcbf29ce484222325;
75 static constexpr uint64_t hash64b_const = 0x100000001b3;
81 inline static constexpr
typename std::enable_if<
sizeof(T) == 4, T>::type
82 hash_fnv1a_const(
const char* str, std::size_t size, T value) noexcept
84 return (!str || size <= 0)
86 : hash_fnv1a_const<T>(&str[1], size - 1, (value ^ uint32_t(str[0])) * hash32b_const);
90 inline static constexpr
typename std::enable_if<
sizeof(T) == 4, std::size_t>::type
98 inline static constexpr
typename std::enable_if<
sizeof(T) == 8, std::size_t>::type
99 hash_fnv1a_const(
const char* str, std::size_t size, uint64_t value) noexcept
101 return (!str || size <= 0)
103 : hash_fnv1a_const<T>(&str[1], size - 1, (value ^ uint64_t(str[0])) * hash64b_const);
107 inline static constexpr
typename std::enable_if<
sizeof(T) == 8, std::size_t>::type
110 return hash64a_const;
116 inline static constexpr
Hash stringHash(
const char* data, std::size_t size) noexcept
118 return Token::hash_fnv1a_const<std::size_t>(data, size, Token::hash_fnv1a_seed<std::size_t>());
128 static std::shared_ptr<Manager> s_manager;
131 SMTK_DEPRECATED_IN_22_11(
"Moving to smtk::string::literals namespace.")
132 inline Token operator""_token(const
char* data, std::
size_t size)
134 return Token{ data, size };
146 inline Token
operator""_token(
const char* data, std::size_t size)
148 return Token{ data, size };
151 inline constexpr
Hash operator""_hash(
const char* data, std::size_t size)
192 struct SMTKCORE_EXPORT hash<
smtk::string::Token>
198 #endif // smtk_string_Token_h