1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
/*
* JsonSerializeFormat.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "JsonSerializeFormat.h"
#include "../JsonNode.h"
//JsonSerializeHelper
JsonSerializeHelper::JsonSerializeHelper(JsonSerializeHelper && other):
owner(other.owner),
restoreState(false)
{
std::swap(restoreState, other.restoreState);
}
JsonSerializeHelper::~JsonSerializeHelper()
{
if(restoreState)
owner->pop();
}
JsonSerializeFormat * JsonSerializeHelper::operator->()
{
return owner;
}
JsonSerializeHelper::JsonSerializeHelper(JsonSerializeFormat * owner_)
: owner(owner_),
restoreState(true)
{
}
//JsonStructSerializer
JsonStructSerializer::JsonStructSerializer(JsonStructSerializer && other)
: JsonSerializeHelper(std::move(static_cast<JsonSerializeHelper &>(other)))
{
}
JsonStructSerializer::JsonStructSerializer(JsonSerializeFormat * owner_)
: JsonSerializeHelper(owner_)
{
}
JsonStructSerializer::~JsonStructSerializer()
{
}
//JsonArraySerializer
JsonArraySerializer::JsonArraySerializer(JsonArraySerializer && other)
: JsonSerializeHelper(std::move(static_cast<JsonSerializeHelper &>(other)))
{
}
JsonArraySerializer::JsonArraySerializer(JsonSerializeFormat * owner_):
JsonSerializeHelper(owner_)
{
thisNode = &owner->getCurrent();
}
JsonStructSerializer JsonArraySerializer::enterStruct(const size_t index)
{
owner->pushArrayElement(index);
return JsonStructSerializer(owner);
}
JsonArraySerializer JsonArraySerializer::enterArray(const size_t index)
{
owner->pushArrayElement(index);
return JsonArraySerializer(owner);
}
void JsonArraySerializer::serializeString(const size_t index, std::string & value)
{
owner->pushArrayElement(index);
owner->serializeInternal(value);
owner->pop();
}
void JsonArraySerializer::serializeInt64(const size_t index, int64_t & value)
{
owner->pushArrayElement(index);
owner->serializeInternal(value);
owner->pop();
}
void JsonArraySerializer::resize(const size_t newSize)
{
resize(newSize, JsonNode::JsonType::DATA_NULL);
}
void JsonArraySerializer::resize(const size_t newSize, JsonNode::JsonType type)
{
owner->resizeCurrent(newSize, type);
}
size_t JsonArraySerializer::size() const
{
return thisNode->Vector().size();
}
//JsonSerializeFormat::LIC
JsonSerializeFormat::LIC::LIC(const std::vector<bool> & Standard, const TDecoder Decoder, const TEncoder Encoder):
standard(Standard), decoder(Decoder), encoder(Encoder)
{
any.resize(standard.size(), false);
all.resize(standard.size(), false);
none.resize(standard.size(), false);
}
JsonSerializeFormat::LICSet::LICSet(const std::set<si32>& Standard, const TDecoder Decoder, const TEncoder Encoder):
standard(Standard), decoder(Decoder), encoder(Encoder)
{
}
//JsonSerializeFormat
JsonSerializeFormat::JsonSerializeFormat(const IInstanceResolver * instanceResolver_, const bool saving_):
saving(saving_),
instanceResolver(instanceResolver_)
{
}
JsonStructSerializer JsonSerializeFormat::enterStruct(const std::string & fieldName)
{
pushStruct(fieldName);
return JsonStructSerializer(this);
}
JsonArraySerializer JsonSerializeFormat::enterArray(const std::string & fieldName)
{
pushArray(fieldName);
return JsonArraySerializer(this);
}
void JsonSerializeFormat::serializeBool(const std::string & fieldName, bool & value)
{
serializeBool<bool>(fieldName, value, true, false, false);
}
void JsonSerializeFormat::serializeBool(const std::string & fieldName, bool & value, const bool defaultValue)
{
serializeBool<bool>(fieldName, value, true, false, defaultValue);
}
|