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