diff --git a/src/util/json/array.h b/src/util/json/array.h index 6643777..a879102 100644 --- a/src/util/json/array.h +++ b/src/util/json/array.h @@ -29,6 +29,8 @@ public: m_values.emplace_back(std::move(value)); } + const std::vector& values() const { return m_values; } + private: std::vector m_values; }; diff --git a/src/util/json/parser.cpp b/src/util/json/parser.cpp index f42fa03..47116df 100644 --- a/src/util/json/parser.cpp +++ b/src/util/json/parser.cpp @@ -28,7 +28,7 @@ Parser::~Parser() // ----------------------------------------- -void Parser::parse() +Value Parser::parse() { Lexer lexer(m_input); lexer.analyze(); @@ -81,6 +81,8 @@ void Parser::parse() break; } + + return result; } // ----------------------------------------- diff --git a/src/util/json/parser.h b/src/util/json/parser.h index 763872e..b21734e 100644 --- a/src/util/json/parser.h +++ b/src/util/json/parser.h @@ -24,7 +24,7 @@ public: Parser(const std::string& input); virtual ~Parser(); - void parse(); + Value parse(); private: Token peek(); diff --git a/src/util/json/value.cpp b/src/util/json/value.cpp index acce86d..f5264ca 100644 --- a/src/util/json/value.cpp +++ b/src/util/json/value.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: MIT */ +#include // assert #include #include // move @@ -64,6 +65,18 @@ Value::Value(const Object& value) m_value.asObject = new Object(value); } +Value Value::operator[](size_t index) +{ + assert(m_type == Type::Array); + return m_value.asArray->values().at(index); +} + +Value Value::operator[](const std::string& key) +{ + assert(m_type == Type::Object); + return m_value.asObject->members().at(key); +} + // ------------------------------------------ void Value::clear() diff --git a/src/util/json/value.h b/src/util/json/value.h index 30b2f8d..0d9cf9b 100644 --- a/src/util/json/value.h +++ b/src/util/json/value.h @@ -40,6 +40,10 @@ public: Value(const Array& value); Value(const Object& value); + // Array index operator + Value operator[](size_t index); + Value operator[](const std::string& key); + bool asBool() const { return m_value.asBool; } double asDouble() const { return m_value.asDouble; } const std::string& asString() const { return *m_value.asString; }