EHS/src/json/JsonVar.cpp

369 lines
7.9 KiB
C++

#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;
}
}