Added ScriptValue::toRef(), spaceship operators for array and map values and fixed return type of index operators.
This commit is contained in:
parent
85373e5293
commit
57a9b6a518
@ -32,12 +32,16 @@ template<typename TScriptValue>
|
|||||||
struct ArrayValue
|
struct ArrayValue
|
||||||
{
|
{
|
||||||
std::vector<TScriptValue> values;
|
std::vector<TScriptValue> values;
|
||||||
|
|
||||||
|
auto operator<=>(const ArrayValue&) const MIJIN_NOEXCEPT = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename TScriptValue>
|
template<typename TScriptValue>
|
||||||
struct MapValue
|
struct MapValue
|
||||||
{
|
{
|
||||||
std::unordered_map<std::string, TScriptValue> values;
|
std::unordered_map<std::string, TScriptValue> values;
|
||||||
|
|
||||||
|
auto operator<=>(const MapValue&) const MIJIN_NOEXCEPT = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UndefinedValue
|
struct UndefinedValue
|
||||||
@ -262,55 +266,65 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Optional<const T&> toRef() const MIJIN_NOEXCEPT
|
||||||
|
{
|
||||||
|
if (std::holds_alternative<T>(base_))
|
||||||
|
{
|
||||||
|
return std::get<T>(base_);
|
||||||
|
}
|
||||||
|
return NULL_OPTIONAL;
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
ScriptValue& operator[](std::size_t index) MIJIN_NOEXCEPT
|
concrete_t& operator[](std::size_t index) MIJIN_NOEXCEPT
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isArray(), "Called operator[size_t] on a non-array value.");
|
MIJIN_ASSERT_FATAL(isArray(), "Called operator[size_t] on a non-array value.");
|
||||||
return std::get<array_t>(base_)[index];
|
return std::get<array_t>(base_).values[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
const ScriptValue& operator[](std::size_t index) const MIJIN_NOEXCEPT
|
const concrete_t& operator[](std::size_t index) const MIJIN_NOEXCEPT
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isArray(), "Called operator[size_t] on a non-array value.");
|
MIJIN_ASSERT_FATAL(isArray(), "Called operator[size_t] on a non-array value.");
|
||||||
return std::get<array_t>(base_)[index];
|
return std::get<array_t>(base_).values[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
ScriptValue& operator[](const std::string& key) MIJIN_NOEXCEPT
|
concrete_t& operator[](const std::string& key)
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isMap(), "Called operator[string] on a non-map value.");
|
MIJIN_ASSERT_FATAL(isMap(), "Called operator[string] on a non-map value.");
|
||||||
return std::get<map_t>(base_)[key];
|
return std::get<map_t>(base_).values.at(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
const ScriptValue& operator[](const std::string& key) const MIJIN_NOEXCEPT
|
const concrete_t& operator[](const std::string& key) const
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isMap(), "Called operator[string] on a non-map value.");
|
MIJIN_ASSERT_FATAL(isMap(), "Called operator[string] on a non-map value.");
|
||||||
return std::get<map_t>(base_)[key];
|
return std::get<map_t>(base_).values.at(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
std::span<ScriptValue> arrayView() MIJIN_NOEXCEPT
|
std::span<concrete_t> arrayView() MIJIN_NOEXCEPT
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isArray(), "Called iterateArray() on a non-array value.");
|
MIJIN_ASSERT_FATAL(isArray(), "Called iterateArray() on a non-array value.");
|
||||||
return std::get<array_t>(base_);
|
return std::get<array_t>(base_);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
std::span<const ScriptValue> arrayView() const MIJIN_NOEXCEPT
|
std::span<const concrete_t> arrayView() const MIJIN_NOEXCEPT
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isArray(), "Called iterateArray() on a non-array value.");
|
MIJIN_ASSERT_FATAL(isArray(), "Called iterateArray() on a non-array value.");
|
||||||
return std::get<array_t>(base_);
|
return std::get<array_t>(base_);
|
||||||
}
|
}
|
||||||
|
|
||||||
MapView<std::string, ScriptValue> mapView() MIJIN_NOEXCEPT
|
MapView<std::string, concrete_t> mapView() MIJIN_NOEXCEPT
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isMap(), "Called iterateMap() on a non-map value.");
|
MIJIN_ASSERT_FATAL(isMap(), "Called iterateMap() on a non-map value.");
|
||||||
return std::get<map_t>(base_);
|
return std::get<map_t>(base_);
|
||||||
}
|
}
|
||||||
|
|
||||||
MapView<std::string, const ScriptValue> mapView() const MIJIN_NOEXCEPT
|
MapView<std::string, const concrete_t> mapView() const MIJIN_NOEXCEPT
|
||||||
{
|
{
|
||||||
MIJIN_ASSERT_FATAL(isMap(), "Called iterateMap() on a non-map value.");
|
MIJIN_ASSERT_FATAL(isMap(), "Called iterateMap() on a non-map value.");
|
||||||
return std::get<map_t>(base_);
|
return std::get<map_t>(base_);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user