|
|
@@ -12,25 +12,6 @@
|
|
|
#include "ObjectFunctions.hpp"
|
|
|
|
|
|
namespace ARDUINOJSON_NAMESPACE {
|
|
|
-
|
|
|
-inline void variantFree(JsonVariantData* var, MemoryPool* pool) {
|
|
|
- ARDUINOJSON_ASSERT(var != 0);
|
|
|
- ARDUINOJSON_ASSERT(pool != 0);
|
|
|
-
|
|
|
- switch (var->type) {
|
|
|
- case JSON_ARRAY:
|
|
|
- case JSON_OBJECT:
|
|
|
- arrayFree(&var->content.asArray, pool);
|
|
|
- break;
|
|
|
- case JSON_OWNED_STRING:
|
|
|
- case JSON_OWNED_RAW:
|
|
|
- pool->freeString(var->content.asOwnedString);
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
template <typename T>
|
|
|
inline T variantAsIntegral(const JsonVariantData* var) {
|
|
|
if (!var) return 0;
|
|
|
@@ -116,30 +97,23 @@ inline const JsonObjectData* variantAsObject(const JsonVariantData* var) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-inline bool variantSetBoolean(JsonVariantData* var, bool value,
|
|
|
- MemoryPool* pool) {
|
|
|
+inline bool variantSetBoolean(JsonVariantData* var, bool value) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_BOOLEAN;
|
|
|
var->content.asInteger = static_cast<JsonUInt>(value);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-inline bool variantSetFloat(JsonVariantData* var, JsonFloat value,
|
|
|
- MemoryPool* pool) {
|
|
|
+inline bool variantSetFloat(JsonVariantData* var, JsonFloat value) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_FLOAT;
|
|
|
var->content.asFloat = value;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
template <typename T>
|
|
|
-inline bool variantSetSignedInteger(JsonVariantData* var, T value,
|
|
|
- MemoryPool* pool) {
|
|
|
+inline bool variantSetSignedInteger(JsonVariantData* var, T value) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
-
|
|
|
if (value >= 0) {
|
|
|
var->type = JSON_POSITIVE_INTEGER;
|
|
|
var->content.asInteger = static_cast<JsonUInt>(value);
|
|
|
@@ -150,20 +124,16 @@ inline bool variantSetSignedInteger(JsonVariantData* var, T value,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-inline bool variantSetUnsignedInteger(JsonVariantData* var, JsonUInt value,
|
|
|
- MemoryPool* pool) {
|
|
|
+inline bool variantSetUnsignedInteger(JsonVariantData* var, JsonUInt value) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_POSITIVE_INTEGER;
|
|
|
var->content.asInteger = static_cast<JsonUInt>(value);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
inline bool variantSetLinkedRaw(JsonVariantData* var,
|
|
|
- SerializedValue<const char*> value,
|
|
|
- MemoryPool* pool) {
|
|
|
+ SerializedValue<const char*> value) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_LINKED_RAW;
|
|
|
var->content.asRaw.data = value.data();
|
|
|
var->content.asRaw.size = value.size();
|
|
|
@@ -174,7 +144,6 @@ template <typename T>
|
|
|
inline bool variantSetOwnedRaw(JsonVariantData* var, SerializedValue<T> value,
|
|
|
MemoryPool* pool) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
StringSlot* slot = makeString(value.data(), value.size()).save(pool);
|
|
|
if (slot) {
|
|
|
var->type = JSON_OWNED_RAW;
|
|
|
@@ -189,7 +158,6 @@ inline bool variantSetOwnedRaw(JsonVariantData* var, SerializedValue<T> value,
|
|
|
template <typename T>
|
|
|
inline bool variantSetString(JsonVariantData* var, T value, MemoryPool* pool) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
StringSlot* slot = value.save(pool);
|
|
|
if (slot) {
|
|
|
var->type = JSON_OWNED_STRING;
|
|
|
@@ -201,42 +169,35 @@ inline bool variantSetString(JsonVariantData* var, T value, MemoryPool* pool) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-inline bool variantSetOwnedString(JsonVariantData* var, StringSlot* slot,
|
|
|
- MemoryPool* pool) {
|
|
|
+inline bool variantSetOwnedString(JsonVariantData* var, StringSlot* slot) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_OWNED_STRING;
|
|
|
var->content.asOwnedString = slot;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-inline bool variantSetString(JsonVariantData* var, const char* value,
|
|
|
- MemoryPool* pool) {
|
|
|
+inline bool variantSetString(JsonVariantData* var, const char* value) {
|
|
|
if (!var) return false;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_LINKED_STRING;
|
|
|
var->content.asString = value;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-inline void variantSetNull(JsonVariantData* var, MemoryPool* pool) {
|
|
|
+inline void variantSetNull(JsonVariantData* var) {
|
|
|
if (!var) return;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_NULL;
|
|
|
}
|
|
|
|
|
|
-inline JsonArrayData* variantToArray(JsonVariantData* var, MemoryPool* pool) {
|
|
|
+inline JsonArrayData* variantToArray(JsonVariantData* var) {
|
|
|
if (!var) return 0;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_ARRAY;
|
|
|
var->content.asArray.head = 0;
|
|
|
var->content.asArray.tail = 0;
|
|
|
return &var->content.asArray;
|
|
|
}
|
|
|
|
|
|
-inline JsonObjectData* variantToObject(JsonVariantData* var, MemoryPool* pool) {
|
|
|
+inline JsonObjectData* variantToObject(JsonVariantData* var) {
|
|
|
if (!var) return 0;
|
|
|
- variantFree(var, pool);
|
|
|
var->type = JSON_OBJECT;
|
|
|
var->content.asObject.head = 0;
|
|
|
var->content.asObject.tail = 0;
|
|
|
@@ -247,16 +208,14 @@ inline bool variantCopy(JsonVariantData* dst, const JsonVariantData* src,
|
|
|
MemoryPool* pool) {
|
|
|
if (!dst) return false;
|
|
|
if (!src) {
|
|
|
- variantFree(dst, pool);
|
|
|
dst->type = JSON_NULL;
|
|
|
return true;
|
|
|
}
|
|
|
switch (src->type) {
|
|
|
case JSON_ARRAY:
|
|
|
- return arrayCopy(variantToArray(dst, pool), &src->content.asArray, pool);
|
|
|
+ return arrayCopy(variantToArray(dst), &src->content.asArray, pool);
|
|
|
case JSON_OBJECT:
|
|
|
- return objectCopy(variantToObject(dst, pool), &src->content.asObject,
|
|
|
- pool);
|
|
|
+ return objectCopy(variantToObject(dst), &src->content.asObject, pool);
|
|
|
case JSON_OWNED_STRING:
|
|
|
return variantSetString(
|
|
|
dst, makeString(src->content.asOwnedString->value), pool);
|
|
|
@@ -266,7 +225,6 @@ inline bool variantCopy(JsonVariantData* dst, const JsonVariantData* src,
|
|
|
src->content.asOwnedRaw->size),
|
|
|
pool);
|
|
|
default:
|
|
|
- variantFree(dst, pool);
|
|
|
// caution: don't override keyIsOwned
|
|
|
dst->type = src->type;
|
|
|
dst->content = src->content;
|