add dv::value.object(...), .list(...)

This commit is contained in:
MihailRis 2024-09-15 11:15:37 +03:00
parent a014204d99
commit fa12b9b751
2 changed files with 55 additions and 8 deletions

View File

@ -228,6 +228,14 @@ namespace dv {
value& operator[](size_t index); value& operator[](size_t index);
const value& operator[](size_t index) const; const value& operator[](size_t index) const;
value& object(const key_t& key);
value& list(const key_t& key);
value& object();
value& list();
}; };
using reference = value&; using reference = value&;
@ -355,4 +363,24 @@ namespace dv {
} }
throw std::runtime_error("value is not a list"); throw std::runtime_error("value is not a list");
} }
value& value::object(const key_t& key) {
reference ref = this->operator[](key);
ref = dv::object();
return ref;
}
value& value::list(const key_t& key) {
reference ref = this->operator[](key);
ref = dv::list();
return ref;
}
value& value::object() {
return add(dv::object());
}
value& value::list() {
return add(dv::list());
}
} }

View File

@ -1,14 +1,33 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "data/dv.hpp" #include "data/dv.hpp"
#include "data/dynamic.hpp"
#include "util/timeutil.hpp"
TEST(dv, dv) { TEST(dv, dv) {
auto value = dv::object({ // speed comparsion with data/dynamic
{"d", "test"}
}); {
auto list = dv::list({ timeutil::ScopeLogTimer log(444);
561, 52, "hello" auto map = dynamic::create_map();
}); auto& list = map->putList("elements");
list.add("world"); for (int i = 0; i < 10000; i++) {
value["a"] = 51; auto& obj = list.putMap();
obj.put("name", "user");
obj.put("age", 90);
auto pos = dynamic::create_list({40, -41, 52});
obj.put("position", pos);
}
}
{
timeutil::ScopeLogTimer log(555);
auto value = dv::object();
auto& list = value.list("elements");
for (int i = 0; i < 10000; i++) {
auto& obj = list.object();
obj["name"] = "user";
obj["age"] = 90;
obj["position"] = dv::list({40, -41, 52});
}
}
} }