From 371d714774755ca1934d9267958af528d64f8bc3 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 15 Sep 2024 01:01:11 +0300 Subject: [PATCH] add dv::value.add(...) --- src/data/dv.hpp | 19 +++++++++++++++++++ test/data/dv.cpp | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/data/dv.hpp b/src/data/dv.hpp index 5c3253f6..fc34acb0 100644 --- a/src/data/dv.hpp +++ b/src/data/dv.hpp @@ -214,6 +214,13 @@ namespace dv { return *this; } + value& add(value v); + + template + value& add(T v) { + return add(value(v)); + } + value& operator[](const key_t& key); const value& operator[](const key_t& key) const; @@ -280,6 +287,11 @@ namespace dv::objects { const_reference operator[](std::size_t index) const { return list.at(index); } + + reference add(value v) { + list.push_back(std::move(v)); + return list[list.size()-1]; + } }; } @@ -336,4 +348,11 @@ namespace dv { value list(std::initializer_list values) { return std::make_shared(values); } + + value& value::add(value v) { + if (type == value_type::list) { + return val.list->add(std::move(v)); + } + throw std::runtime_error("value is not a list"); + } } diff --git a/test/data/dv.cpp b/test/data/dv.cpp index cc407dfc..ad521bfb 100644 --- a/test/data/dv.cpp +++ b/test/data/dv.cpp @@ -3,8 +3,12 @@ #include "data/dv.hpp" TEST(dv, dv) { - dv::value value = dv::object({ + auto value = dv::object({ {"d", "test"} }); + auto list = dv::list({ + 561, 52, "hello" + }); + list.add("world"); value["a"] = 51; }