migrate from dynamic::Value to dv::value & total erase namespace 'dynamic'

This commit is contained in:
MihailRis
2024-09-18 23:31:18 +03:00
parent d3ba4b2e3e
commit 34d2e6d400
69 changed files with 1247 additions and 2248 deletions
+64 -67
View File
@@ -23,16 +23,12 @@ namespace dv {
}
value& value::operator[](const key_t& key) {
if (type == value_type::object) {
return (*val.object)[key];
}
throw std::runtime_error("value is not an object");
check_type(type, value_type::object);
return (*val.object)[key];
}
const value& value::operator[](const key_t& key) const {
if (type == value_type::object) {
return (*val.object)[key];
}
throw std::runtime_error("value is not an object");
check_type(type, value_type::object);
return (*val.object)[key];
}
value& value::operator=(const objects::Bytes& bytes) {
@@ -40,23 +36,17 @@ namespace dv {
}
value& value::operator[](size_t index) {
if (type == value_type::list) {
return (*val.list)[index];
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
return (*val.list)[index];
}
const value& value::operator[](size_t index) const {
if (type == value_type::list) {
return (*val.list)[index];
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
return (*val.list)[index];
}
void value::add(value v) {
if (type == value_type::list) {
return val.list->push(std::move(v));
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
return val.list->push_back(std::move(v));
}
value& value::object(const key_t& key) {
@@ -72,54 +62,42 @@ namespace dv {
}
value& value::object() {
if (type == value_type::list) {
return val.list->add(std::make_shared<objects::Object>());
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
val.list->push_back(std::make_shared<objects::Object>());
return val.list->operator[](val.list->size()-1);
}
value& value::list() {
if (type == value_type::list) {
return val.list->add(std::make_shared<objects::List>());
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
val.list->push_back(std::make_shared<objects::List>());
return val.list->operator[](val.list->size()-1);
}
list_t::iterator value::begin() {
if (type == value_type::list) {
return val.list->begin();
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
return val.list->begin();
}
list_t::iterator value::end() {
if (type == value_type::list) {
return val.list->end();
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
return val.list->end();
}
list_t::const_iterator value::begin() const {
if (type == value_type::list) {
const auto& constlist = *val.list;
return constlist.begin();
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
const auto& constlist = *val.list;
return constlist.begin();
}
list_t::const_iterator value::end() const {
if (type == value_type::list) {
const auto& constlist = *val.list;
return constlist.end();
}
throw std::runtime_error("value is not a list");
check_type(type, value_type::list);
const auto& constlist = *val.list;
return constlist.end();
}
const std::string& value::asString() const {
if (type == value_type::string) {
return *val.string;
}
throw std::runtime_error("type error");
check_type(type, value_type::string);
return *val.string;
}
integer_t value::asInteger() const {
@@ -128,7 +106,8 @@ namespace dv {
} else if (type == value_type::number) {
return static_cast<integer_t>(val.number);
}
throw std::runtime_error("type error");
throw_type_error(type, value_type::integer);
return 0; // unreachable
}
number_t value::asNumber() const {
@@ -137,7 +116,8 @@ namespace dv {
} else if (type == value_type::integer) {
return static_cast<number_t>(val.integer);
}
throw std::runtime_error("type error");
throw_type_error(type, value_type::integer);
return 0; // unreachable
}
boolean_t value::asBoolean() const {
@@ -146,31 +126,26 @@ namespace dv {
} else if (type == value_type::integer) {
return val.integer != 0;
}
throw std::runtime_error("type error");
throw_type_error(type, value_type::boolean);
return false; // unreachable
}
objects::Bytes& value::asBytes() {
if (type == value_type::bytes) {
return *val.bytes;
}
throw std::runtime_error("type error");
check_type(type, value_type::bytes);
return *val.bytes;
}
const objects::Bytes& value::asBytes() const {
if (type == value_type::bytes) {
return *val.bytes;
}
throw std::runtime_error("type error");
check_type(type, value_type::bytes);
return *val.bytes;
}
const objects::Object& value::asObject() const {
if (type == value_type::object) {
return *val.object;
}
throw std::runtime_error("type error");
check_type(type, value_type::object);
return *val.object;
}
const size_t value::size() const {
size_t value::size() const {
switch (type) {
case value_type::list:
return val.list->size();
@@ -179,8 +154,30 @@ namespace dv {
case value_type::string:
return val.string->size();
default:
throw std::runtime_error("type error");
return 0;
}
}
bool value::has(const key_t& k) const {
if (type == value_type::object) {
return val.object->find(k) != val.object->end();
}
return false;
}
void value::erase(const key_t& key) {
check_type(type, value_type::object);
val.object->erase(key);
}
void value::erase(size_t index) {
check_type(type, value_type::list);
val.list->erase(val.list->begin() + index);
}
}
#include "coders/json.hpp"
std::ostream& operator<<(std::ostream& stream, const dv::value& value) {
return stream << json::stringify(value, false);
}