369 lines
7.9 KiB
C++
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;
|
|
}
|
|
} |