Fix call of overloaded 'String(const char*, int)' is ambiguous

This commit is contained in:
Benoit Blanchon
2022-02-17 10:47:42 +01:00
parent ef8379df1b
commit a880614a75
15 changed files with 47 additions and 31 deletions

View File

@@ -208,7 +208,7 @@ class MemoryPoolPrint : public Print {
String str() {
ARDUINOJSON_ASSERT(_size < _capacity);
return String(_pool->saveStringFromFreeZone(_size), _size, false);
return String(_pool->saveStringFromFreeZone(_size), _size, String::Copied);
}
size_t write(uint8_t c) {

View File

@@ -210,7 +210,7 @@ class VariantData {
void setString(String s) {
ARDUINOJSON_ASSERT(s);
if (s.isStatic())
if (s.isLinked())
setType(VALUE_IS_LINKED_STRING);
else
setType(VALUE_IS_OWNED_STRING);

View File

@@ -73,9 +73,11 @@ inline T VariantData::asFloat() const {
inline String VariantData::asString() const {
switch (type()) {
case VALUE_IS_LINKED_STRING:
return String(_content.asString.data, _content.asString.size, true);
return String(_content.asString.data, _content.asString.size,
String::Linked);
case VALUE_IS_OWNED_STRING:
return String(_content.asString.data, _content.asString.size, false);
return String(_content.asString.data, _content.asString.size,
String::Copied);
default:
return String();
}
@@ -174,7 +176,7 @@ template <typename TAdaptedString, typename TCallback>
bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool,
TCallback callback) {
const char *copy = pool->saveString(str);
String storedString(copy, str.size(), false);
String storedString(copy, str.size(), String::Copied);
callback(storedString);
return copy != 0;
}

View File

@@ -78,7 +78,7 @@ class VariantSlot {
void setKey(String k) {
ARDUINOJSON_ASSERT(k);
if (k.isStatic())
if (k.isLinked())
_flags &= VALUE_MASK;
else
_flags |= OWNED_KEY_BIT;