#include "ehs/json/JsonVar.h" #include "ehs/json/JsonBase.h" #include "ehs/json/JsonObj.h" #include "ehs/json/JsonArray.h" #include "ehs/json/JsonBool.h" #include "ehs/json/JsonNum.h" #include "ehs/json/JsonStr.h" namespace ehs { JsonVar::~JsonVar() { delete value; } JsonVar::JsonVar() : hashId(0), value(nullptr) { } JsonVar::JsonVar(Str_8 id) : hashId(id.Hash_64()), id(std::move(id)), value(nullptr) { } JsonVar::JsonVar(Str_8 id, const JsonBase* const value) : hashId(id.Hash_64()), id(std::move(id)) { switch (value->GetType()) { case JsonType::OBJ: this->value = (JsonBase*)new JsonObj(*(JsonObj*)value); break; case JsonType::ARRAY: this->value = (JsonBase*)new JsonArray(*(JsonArray*)value); break; case JsonType::BOOL: this->value = (JsonBase*)new JsonBool(*(JsonBool*)value); break; case JsonType::NUM: this->value = (JsonBase*)new JsonNum(*(JsonNum*)value); break; case JsonType::STR: this->value = (JsonBase*)new JsonStr(*(JsonStr*)value); break; default: this->value = new JsonBase(JsonType::NULLOBJ); break; } } JsonVar::JsonVar(Str_8 id, const JsonBase& value) : hashId(id.Hash_64()), id(std::move(id)), value(new JsonBase(value)) { } JsonVar::JsonVar(Str_8 id, const JsonObj& value) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonObj(value)) { } JsonVar::JsonVar(Str_8 id, const JsonArray& value) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonArray(value)) { } JsonVar::JsonVar(Str_8 id, const JsonBool& value) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonBool(value)) { } JsonVar::JsonVar(Str_8 id, const bool boolean) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonBool(boolean)) { } JsonVar::JsonVar(Str_8 id, const JsonNum& value) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(value)) { } JsonVar::JsonVar(Str_8 id, const SInt_64 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const UInt_64 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const SInt_32 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const UInt_32 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const SInt_16 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const UInt_16 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const SInt_8 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const UInt_8 num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const double num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const float num) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonNum(num)) { } JsonVar::JsonVar(Str_8 id, const JsonStr& value) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonStr(value)) { } JsonVar::JsonVar(Str_8 id, const Char_8* str, const UInt_64 size) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonStr(str, size)) { } JsonVar::JsonVar(Str_8 id, Str_8 str) : hashId(id.Hash_64()), id(std::move(id)), value((JsonBase*)new JsonStr(std::move(str))) { } JsonVar::JsonVar(JsonVar&& var) noexcept : hashId(var.hashId), id(std::move(var.id)), value(var.value) { var.hashId = 0; var.value = nullptr; } JsonVar::JsonVar(const JsonVar& var) : hashId(var.hashId), id(var.id), value(nullptr) { if (!var.value) return; switch (var.value->GetType()) { case JsonType::OBJ: value = (JsonBase*)new JsonObj(*(JsonObj*)var.value); break; case JsonType::ARRAY: value = (JsonBase*)new JsonArray(*(JsonArray*)var.value); break; case JsonType::BOOL: value = (JsonBase*)new JsonBool(*(JsonBool*)var.value); break; case JsonType::NUM: value = (JsonBase*)new JsonNum(*(JsonNum*)var.value); break; case JsonType::STR: value = (JsonBase*)new JsonStr(*(JsonStr*)var.value); break; default: value = new JsonBase(); break; } } JsonVar& JsonVar::operator=(JsonVar&& var) noexcept { if (this == &var) return *this; hashId = var.hashId; id = std::move(var.id); delete value; value = var.value; var.hashId = 0; var.value = nullptr; return *this; } JsonVar& JsonVar::operator=(const JsonVar& var) { if (this == &var) return *this; hashId = var.hashId; id = var.id; delete value; value = nullptr; if (!var.value) return *this; switch (var.value->GetType()) { case JsonType::OBJ: value = (JsonBase*)new JsonObj(*(JsonObj*)var.value); break; case JsonType::ARRAY: value = (JsonBase*)new JsonArray(*(JsonArray*)var.value); break; case JsonType::BOOL: value = (JsonBase*)new JsonBool(*(JsonBool*)var.value); break; case JsonType::NUM: value = (JsonBase*)new JsonNum(*(JsonNum*)var.value); break; case JsonType::STR: value = (JsonBase*)new JsonStr(*(JsonStr*)var.value); break; default: value = new JsonBase(); break; } return *this; } UInt_64 JsonVar::GetHashId() const { return hashId; } Str_8 JsonVar::GetId() const { return id; } void JsonVar::SetValue(const JsonBase* const newValue) { if (!newValue) return; delete value; switch (newValue->GetType()) { case JsonType::OBJ: value = (JsonBase*)new JsonObj(*(JsonObj*)newValue); break; case JsonType::ARRAY: value = (JsonBase*)new JsonArray(*(JsonArray*)newValue); break; case JsonType::BOOL: value = (JsonBase*)new JsonBool(*(JsonBool*)newValue); break; case JsonType::NUM: value = (JsonBase*)new JsonNum(*(JsonNum*)newValue); break; case JsonType::STR: value = (JsonBase*)new JsonStr(*(JsonStr*)newValue); break; default: value = new JsonBase(); break; } } void JsonVar::SetValue(const JsonBase& newValue) { delete value; value = new JsonBase(newValue); } void JsonVar::SetValue(const JsonObj& newValue) { delete value; value = (JsonBase*)new JsonObj(newValue); } void JsonVar::SetValue(const JsonArray& newValue) { delete value; value = (JsonBase*)new JsonArray(newValue); } void JsonVar::SetValue(const JsonBool& newValue) { delete value; value = (JsonBase*)new JsonBool(newValue); } void JsonVar::SetValue(const bool newValue) { delete value; value = (JsonBase*)new JsonBool(newValue); } void JsonVar::SetValue(const JsonNum& newValue) { delete value; value = (JsonBase*)new JsonNum(newValue); } void JsonVar::SetValue(const float newValue) { delete value; value = (JsonBase*)new JsonNum(newValue); } void JsonVar::SetValue(const JsonStr& newValue) { delete value; value = (JsonBase*)new JsonStr(newValue); } void JsonVar::SetValue(const Char_8* newValue, const UInt_64 size) { delete value; value = (JsonBase*)new JsonStr(newValue, size); } void JsonVar::SetValue(const Str_8& newValue) { delete value; value = (JsonBase*)new JsonStr(newValue); } const JsonBase* JsonVar::GetValue() const { return value; } JsonBase* JsonVar::GetValue() { return value; } Str_8 JsonVar::ToStr(const UInt_64 level, const bool compact) const { Str_8 result; if (!compact) { for (UInt_64 l = 0; l < level; ++l) result += "\t"; } result += "\"" + id + "\":"; if (!compact) result += " "; if (value->GetType() == JsonType::OBJ || value->GetType() == JsonType::ARRAY) result += value->ToStr(level, compact); else result += value->ToStr(0, compact); return result; } }