10 #ifndef smtk_string_Token_h
11 #define smtk_string_Token_h
13 #include "smtk/string/Manager.h"
33 Token(
const char* data =
nullptr, std::size_t size = std::string::npos);
35 Token(
const std::string& data);
49 const std::string& data()
const;
56 bool operator==(
const Token& other)
const;
58 bool operator!=(
const Token& other)
const;
61 bool operator<(
const Token& other)
const;
62 bool operator>(
const Token& other)
const;
63 bool operator<=(
const Token& other)
const;
64 bool operator>=(
const Token& other)
const;
74 static constexpr uint32_t hash32a_const = 0x811c9dc5;
75 static constexpr uint32_t hash32b_const = 0x1000193;
76 static constexpr uint64_t hash64a_const = 0xcbf29ce484222325;
77 static constexpr uint64_t hash64b_const = 0x100000001b3;
83 inline static constexpr
typename std::enable_if<
sizeof(T) == 4, T>::type
84 hash_fnv1a_const(
const char* str, std::size_t size, T value) noexcept
86 return (!str || size <= 0)
88 : hash_fnv1a_const<T>(&str[1], size - 1, (value ^ uint32_t(str[0])) * hash32b_const);
92 inline static constexpr
typename std::enable_if<
sizeof(T) == 4, std::size_t>::type
100 inline static constexpr
typename std::enable_if<
sizeof(T) == 8, std::size_t>::type
101 hash_fnv1a_const(
const char* str, std::size_t size, uint64_t value) noexcept
103 return (!str || size <= 0)
105 : hash_fnv1a_const<T>(&str[1], size - 1, (value ^ uint64_t(str[0])) * hash64b_const);
109 inline static constexpr
typename std::enable_if<
sizeof(T) == 8, std::size_t>::type
112 return hash64a_const;
118 inline static constexpr
Hash stringHash(
const char* data, std::size_t size) noexcept
120 return Token::hash_fnv1a_const<std::size_t>(data, size, Token::hash_fnv1a_seed<std::size_t>());
130 static std::shared_ptr<Manager> s_manager;
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