14 for (
int shift = 0; shift < 32; shift += 8)
15 out.push_back(
static_cast<char>((value >> shift) & 0xFFu));
19 for (
int shift = 0; shift < 64; shift += 8)
20 out.push_back(
static_cast<char>((value >> shift) & 0xFFu));
46 result.
text = std::move(value);
57 result.fields = std::move(
fields);
66 if (field.key.kind ==
Kind::String && field.key.text == key)
85 AppendUint32(
static_cast<uint32_t
>(text.size()), out);
90 out.push_back(
static_cast<char>(value.
kind));
98 AppendUint32(
static_cast<uint32_t
>(value.
fields.size()), out);
108 constexpr uint64_t FNV_OFFSET = 14695981039346656037ull;
109 constexpr uint64_t FNV_PRIME = 1099511628211ull;
111 uint64_t hash = FNV_OFFSET;
112 for (
const char byte : bytes) {
113 hash ^=
static_cast<uint8_t
>(byte);
123 switch (value.
kind) {
131 std::string text =
"{";
132 for (
size_t index = 0; index < value.
fields.size(); ++index) {
void AppendUint32(uint32_t value, std::string &out)
void AppendUint64(uint64_t value, std::string &out)
std::string ToDebugText(const ScriptValue &value)
void AppendCanonicalBytes(const ScriptValue &value, std::string &out)
uint64_t HashBytes(std::string_view bytes)
bool KeyLess(const ScriptValue &left, const ScriptValue &right)
void AppendCanonicalString(std::string_view text, std::string &out)
std::vector< ScriptField > fields
static ScriptValue MakeString(std::string value)
static ScriptValue MakeTable(std::vector< ScriptField > fields)
static ScriptValue MakeNumber(double value)
const ScriptValue * Find(std::string_view key) const
static ScriptValue MakeBoolean(bool value)