forked from bblanchon/ArduinoJson
Move string copy logic into VariantData::setString()
This commit is contained in:
@ -394,7 +394,7 @@ class JsonDeserializer {
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
variant.setString(stringBuilder_.save());
|
variant.setOwnedString(stringBuilder_.save());
|
||||||
|
|
||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
}
|
}
|
||||||
|
@ -370,7 +370,7 @@ class MsgPackDeserializer {
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
variant->setString(stringBuilder_.save());
|
variant->setOwnedString(stringBuilder_.save());
|
||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ inline void convertToJson(const ::Printable& src, JsonVariant dst) {
|
|||||||
data->setNull();
|
data->setNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data->setString(print.save());
|
data->setOwnedString(print.save());
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -304,13 +304,30 @@ class VariantData {
|
|||||||
setRawString(s);
|
setRawString(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setString(const char* s) {
|
template <typename TAdaptedString>
|
||||||
|
void setString(TAdaptedString value, MemoryPool* pool) {
|
||||||
|
setNull(pool);
|
||||||
|
|
||||||
|
if (value.isNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (value.isLinked()) {
|
||||||
|
setLinkedString(value.data());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto dup = pool->saveString(value);
|
||||||
|
if (dup)
|
||||||
|
setOwnedString(dup);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setLinkedString(const char* s) {
|
||||||
ARDUINOJSON_ASSERT(s);
|
ARDUINOJSON_ASSERT(s);
|
||||||
setType(VALUE_IS_LINKED_STRING);
|
setType(VALUE_IS_LINKED_STRING);
|
||||||
content_.asLinkedString = s;
|
content_.asLinkedString = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setString(StringNode* s) {
|
void setOwnedString(StringNode* s) {
|
||||||
ARDUINOJSON_ASSERT(s);
|
ARDUINOJSON_ASSERT(s);
|
||||||
setType(VALUE_IS_OWNED_STRING);
|
setType(VALUE_IS_OWNED_STRING);
|
||||||
content_.asOwnedString = s;
|
content_.asOwnedString = s;
|
||||||
|
@ -47,7 +47,7 @@ inline bool variantCopyFrom(VariantData* dst, const VariantData* src,
|
|||||||
auto dup = pool->saveString(str);
|
auto dup = pool->saveString(str);
|
||||||
if (!dup)
|
if (!dup)
|
||||||
return false;
|
return false;
|
||||||
dst->setString(dup);
|
dst->setOwnedString(dup);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case VALUE_IS_RAW_STRING: {
|
case VALUE_IS_RAW_STRING: {
|
||||||
@ -95,21 +95,7 @@ inline void variantSetString(VariantData* var, TAdaptedString value,
|
|||||||
MemoryPool* pool) {
|
MemoryPool* pool) {
|
||||||
if (!var)
|
if (!var)
|
||||||
return;
|
return;
|
||||||
var->setNull(pool);
|
var->setString(value, pool);
|
||||||
|
|
||||||
if (value.isNull())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (value.isLinked()) {
|
|
||||||
var->setString(value.data());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto dup = pool->saveString(value);
|
|
||||||
if (dup)
|
|
||||||
var->setString(dup);
|
|
||||||
else
|
|
||||||
var->setNull();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
Reference in New Issue
Block a user