diff --git a/source/mijin/types/script_value.hpp b/source/mijin/types/script_value.hpp index f2e0bf5..2bc1c82 100644 --- a/source/mijin/types/script_value.hpp +++ b/source/mijin/types/script_value.hpp @@ -10,6 +10,7 @@ #include #include +#include "../container/map_view.hpp" #include "../container/optional.hpp" #include "../internal/common.hpp" #include "../util/traits.hpp" @@ -259,6 +260,60 @@ public: static_assert(mijin::always_false_v, "Cannot convert to this type."); } } + + [[nodiscard]] + ScriptValue& operator[](std::size_t index) MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isArray(), "Called operator[size_t] on a non-array value."); + return std::get(base_)[index]; + } + + [[nodiscard]] + const ScriptValue& operator[](std::size_t index) const MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isArray(), "Called operator[size_t] on a non-array value."); + return std::get(base_)[index]; + } + + [[nodiscard]] + ScriptValue& operator[](const std::string& key) MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isMap(), "Called operator[string] on a non-map value."); + return std::get(base_)[key]; + } + + [[nodiscard]] + const ScriptValue& operator[](const std::string& key) const MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isMap(), "Called operator[string] on a non-map value."); + return std::get(base_)[key]; + } + + [[nodiscard]] + std::span arrayView() MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isArray(), "Called iterateArray() on a non-array value."); + return std::get(base_); + } + + [[nodiscard]] + std::span arrayView() const MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isArray(), "Called iterateArray() on a non-array value."); + return std::get(base_); + } + + MapView mapView() MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isMap(), "Called iterateMap() on a non-map value."); + return std::get(base_); + } + + MapView mapView() const MIJIN_NOEXCEPT + { + MIJIN_ASSERT_FATAL(isMap(), "Called iterateMap() on a non-map value."); + return std::get(base_); + } }; //