11 template<
bool DebugFields>
92 constexpr auto stringid(std::string_view value)
noexcept
99 if (std::is_constant_evaluated())
102 .value = { .value = hash_result.
h[0] },
103 .debug_info = { .name_value = { value.data(), char(
'\xff') } }
109 .value = { .value = hash_result.
h[0] },
110 .debug_info = {.name_value = {.consteval_flag =
'\0'}}
113 size_t const cstr_size = value.size();
114 size_t const origin_size = std::size(result.debug_info.name_hint);
116 size_t const copy_count = std::min(origin_size, cstr_size);
117 size_t const copy_offset = std::max(
size_t{ 0 }, cstr_size - copy_count);
121 for (
auto& v : result.debug_info.name_hint)
125 v = value[copy_offset + i];
137 result.debug_info.name_hint[0] =
'~';
145 .value = { .value = hash_result.
h[0] }
150 constexpr auto stringid(
const char*
string,
size_t size)
noexcept
162 if (std::is_constant_evaluated())
164 return val.debug_info.name_value.value;
168 if (val.debug_info.name_value.consteval_flag ==
char(
'\xff'))
170 return val.debug_info.name_value.value;
174 char const* end = val.debug_info.name_hint + 23;
176 while (*end ==
'\0' && end > val.debug_info.name_hint) --end;
177 return { val.debug_info.name_hint, end + 1 };
182 template<
bool HasDebugInfo>
190 return sid_hash.value;
199 constexpr auto operator""_sid(
char const* str,
size_t len)
noexcept
204 constexpr auto operator""_sid_hash(
char const* str,
size_t len)
noexcept
216 return { .value =
value };
221 return value == strid_hash;
231 return { .value =
value };
236 return value == strid_hash;
241 return left.value.value <=> right.value.value;
static constexpr uint32_t Constant_StringID_DefaultSeed
The seed used to generate hash values for ice::StringID.
Definition constants.hxx:17
static constexpr bool Constant_StringID_DebugInfoEnabled
Switch controling the default implementation used for ice::StringID.
Definition constants.hxx:22
Definition murmur2.hxx:42
constexpr auto cexpr_murmur2_x64_64(std::u8string_view key, ice::u64 seed) noexcept -> mm2_x64_64
Definition murmur2.hxx:107
Definition stringid.hxx:30
char[24] StringID_DebugNameHint
Definition stringid.hxx:41
Definition editable_operations.hxx:9
SPDX-License-Identifier: MIT.
Definition array.hxx:12
constexpr auto operator<=>(ice::TimeType auto left, TimeType auto right) noexcept
Definition clock_types.hxx:135
std::conditional_t< ice::build::Constant_StringID_DebugInfoEnabled, StringID const &, StringID > StringID_Arg
Argument type used to pass ice::StringID values to functions.
Definition stringid.hxx:23
std::uint64_t u64
Definition types.hxx:27
std::int32_t i32
Definition types.hxx:21
BaseStringID< ice::build::Constant_StringID_DebugInfoEnabled > StringID
\copy ice::BaseStringID.
Definition stringid.hxx:15
constexpr auto stringid_hash(ice::BaseStringID< HasDebugInfo > val) noexcept -> ice::detail::stringid_type_v3::StringID_Hash
Definition stringid.hxx:183
constexpr auto stringid(ice::StaticString< Capacity, char > value) noexcept -> ice::StringID
Definition static_string.hxx:182
constexpr auto hash(ice::HeapString<> const &value) noexcept -> ice::u64
Definition heap_string.hxx:251
constexpr auto stringid_hint(ice::BaseStringID< false > val) noexcept -> std::string_view
Definition stringid.hxx:155
static constexpr ice::StringID StringID_Invalid
Definition stringid.hxx:90
constexpr operator ice::StringID_Hash() const noexcept
Definition stringid.hxx:209
detail::stringid_type_v3::StringID_Hash value
Definition stringid.hxx:70
ice::TaggedStrongValue< ice::detail::stringid_type_v3::StringID_Tag > TypeTag
Definition stringid.hxx:68
detail::stringid_type_v3::StringID_Hash value
Definition stringid.hxx:82
detail::stringid_type_v3::StringID_DebugInfo debug_info
Definition stringid.hxx:83
ice::TaggedStrongValue< ice::detail::stringid_type_v3::StringID_Tag > TypeTag
Definition stringid.hxx:80
constexpr operator ice::StringID_Hash() const noexcept
Definition stringid.hxx:224
Hashed representation of a ice::String value.
Definition stringid.hxx:12
Type tag to enable utility functions for strongly typed values.
Definition strong_type_value.hxx:11
Type tag to enable utility functions for strongly typed values across multiple types.
Definition strong_type_value.hxx:31
Definition murmur2.hxx:45
ice::u64 h[1]
Definition murmur2.hxx:46
Definition stringid.hxx:44
char consteval_flag
Definition stringid.hxx:46
char const * value
Definition stringid.hxx:45
Internal hash type representing the hashed string value.
Definition stringid.hxx:34
ice::u64 value
Definition stringid.hxx:37
ice::StrongValue TypeTag
Definition stringid.hxx:35
Definition stringid.hxx:50
StringID_DebugNameValue name_value
Definition stringid.hxx:52
StringID_DebugNameHint name_hint
Definition stringid.hxx:51