Add CopiedString and LinkedString

This commit is contained in:
Benoit Blanchon
2021-11-22 09:40:20 +01:00
parent b06bbd9d2a
commit 62f9b94ab1
13 changed files with 83 additions and 50 deletions

View File

@@ -104,10 +104,10 @@ class VariantData {
case VALUE_IS_OBJECT:
return toObject().copyFrom(src._content.asCollection, pool);
case VALUE_IS_OWNED_STRING:
return setString(adaptString(const_cast<char *>(src._content.asString)),
pool);
return storeString(
adaptString(const_cast<char *>(src._content.asString)), pool);
case VALUE_IS_OWNED_RAW:
return setOwnedRaw(
return storeOwnedRaw(
serialized(src._content.asRaw.data, src._content.asRaw.size), pool);
default:
setType(src.type());
@@ -194,7 +194,7 @@ class VariantData {
}
template <typename T>
bool setOwnedRaw(SerializedValue<T> value, MemoryPool *pool) {
bool storeOwnedRaw(SerializedValue<T> value, MemoryPool *pool) {
const char *dup = pool->saveString(adaptString(value.data(), value.size()));
if (dup) {
setType(VALUE_IS_OWNED_RAW);
@@ -223,20 +223,20 @@ class VariantData {
setType(VALUE_IS_NULL);
}
void setStringPointer(const char *s, storage_policies::store_by_copy) {
ARDUINOJSON_ASSERT(s != 0);
void setString(CopiedString s) {
ARDUINOJSON_ASSERT(s);
setType(VALUE_IS_OWNED_STRING);
_content.asString = s;
_content.asString = s.c_str();
}
void setStringPointer(const char *s, storage_policies::store_by_address) {
ARDUINOJSON_ASSERT(s != 0);
void setString(LinkedString s) {
ARDUINOJSON_ASSERT(s);
setType(VALUE_IS_LINKED_STRING);
_content.asString = s;
_content.asString = s.c_str();
}
template <typename TAdaptedString>
bool setString(TAdaptedString value, MemoryPool *pool) {
bool storeString(TAdaptedString value, MemoryPool *pool) {
return storeString(value, pool, typename TAdaptedString::storage_policy());
}
@@ -342,7 +342,7 @@ class VariantData {
if (value.isNull())
setNull();
else
setStringPointer(value.data(), storage_policies::store_by_address());
setString(LinkedString(value.data()));
return true;
}
@@ -358,7 +358,7 @@ class VariantData {
setNull();
return false;
}
setStringPointer(copy, storage_policies::store_by_copy());
setString(CopiedString(copy));
return true;
}
};