From 44aee3174799034e724e1a4cce035cb7eca6e549 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Fri, 25 Oct 2024 00:08:36 +0200 Subject: [PATCH] Added some utilities to ScriptValue for reading from arrays and maps. --- source/mijin/types/script_value.hpp | 55 +++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) 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_); + } }; //