forked from bblanchon/ArduinoJson
Fix call of overloaded 'String(const char*, int)' is ambiguous
This commit is contained in:
@ -64,7 +64,7 @@ inline bool CollectionData::copyFrom(const CollectionData& src,
|
||||
for (VariantSlot* s = src._head; s; s = s->next()) {
|
||||
VariantData* var;
|
||||
if (s->key() != 0) {
|
||||
String key(s->key(), !s->ownsKey());
|
||||
String key(s->key(), s->ownsKey() ? String::Copied : String::Linked);
|
||||
var = addMember(adaptString(key), pool, getStringStoragePolicy(key));
|
||||
} else {
|
||||
var = addElement(pool);
|
||||
|
@ -13,7 +13,8 @@ class Pair {
|
||||
public:
|
||||
Pair(MemoryPool* pool, VariantSlot* slot) {
|
||||
if (slot) {
|
||||
_key = String(slot->key(), !slot->ownsKey());
|
||||
_key = String(slot->key(),
|
||||
slot->ownsKey() ? String::Copied : String::Linked);
|
||||
_value = VariantRef(pool, slot->data());
|
||||
}
|
||||
}
|
||||
@ -35,7 +36,8 @@ class PairConst {
|
||||
public:
|
||||
PairConst(const VariantSlot* slot) {
|
||||
if (slot) {
|
||||
_key = String(slot->key(), !slot->ownsKey());
|
||||
_key = String(slot->key(),
|
||||
slot->ownsKey() ? String::Copied : String::Linked);
|
||||
_value = VariantConstRef(slot->data());
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ class StringCopier {
|
||||
String save() {
|
||||
ARDUINOJSON_ASSERT(_ptr);
|
||||
ARDUINOJSON_ASSERT(_size < _capacity); // needs room for the terminator
|
||||
return String(_pool->saveStringFromFreeZone(_size), _size, false);
|
||||
return String(_pool->saveStringFromFreeZone(_size), _size, String::Copied);
|
||||
}
|
||||
|
||||
void append(const char* s) {
|
||||
@ -52,7 +52,7 @@ class StringCopier {
|
||||
ARDUINOJSON_ASSERT(_ptr);
|
||||
ARDUINOJSON_ASSERT(_size < _capacity);
|
||||
_ptr[_size] = 0;
|
||||
return String(_ptr, _size, false);
|
||||
return String(_ptr, _size, String::Copied);
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -33,7 +33,7 @@ class StringMover {
|
||||
|
||||
String str() const {
|
||||
_writePtr[0] = 0; // terminator
|
||||
return String(_startPtr, size(), true);
|
||||
return String(_startPtr, size(), String::Linked);
|
||||
}
|
||||
|
||||
size_t size() const {
|
||||
|
@ -12,7 +12,7 @@ namespace ARDUINOJSON_NAMESPACE {
|
||||
struct LinkStringStoragePolicy {
|
||||
template <typename TAdaptedString, typename TCallback>
|
||||
bool store(TAdaptedString str, MemoryPool *, TCallback callback) {
|
||||
String storedString(str.data(), str.size(), true);
|
||||
String storedString(str.data(), str.size(), String::Linked);
|
||||
callback(storedString);
|
||||
return !str.isNull();
|
||||
}
|
||||
@ -50,7 +50,7 @@ inline LinkStringStoragePolicy getStringStoragePolicy(const char *) {
|
||||
}
|
||||
|
||||
inline LinkOrCopyStringStoragePolicy getStringStoragePolicy(const String &s) {
|
||||
return LinkOrCopyStringStoragePolicy(s.isStatic());
|
||||
return LinkOrCopyStringStoragePolicy(s.isLinked());
|
||||
}
|
||||
|
||||
} // namespace ARDUINOJSON_NAMESPACE
|
||||
|
@ -14,15 +14,15 @@ namespace ARDUINOJSON_NAMESPACE {
|
||||
|
||||
class String : public SafeBoolIdom<String> {
|
||||
public:
|
||||
String() : _data(0), _size(0), _isStatic(true) {}
|
||||
enum Ownership { Copied, Linked };
|
||||
|
||||
String(const char* data, bool isStaticData = true)
|
||||
: _data(data),
|
||||
_size(data ? ::strlen(data) : 0),
|
||||
_isStatic(isStaticData) {}
|
||||
String() : _data(0), _size(0), _ownership(Linked) {}
|
||||
|
||||
String(const char* data, size_t sz, bool isStaticData = true)
|
||||
: _data(data), _size(sz), _isStatic(isStaticData) {}
|
||||
String(const char* data, Ownership ownership = Linked)
|
||||
: _data(data), _size(data ? ::strlen(data) : 0), _ownership(ownership) {}
|
||||
|
||||
String(const char* data, size_t sz, Ownership ownership = Linked)
|
||||
: _data(data), _size(sz), _ownership(ownership) {}
|
||||
|
||||
const char* c_str() const {
|
||||
return _data;
|
||||
@ -32,8 +32,8 @@ class String : public SafeBoolIdom<String> {
|
||||
return !_data;
|
||||
}
|
||||
|
||||
bool isStatic() const {
|
||||
return _isStatic;
|
||||
bool isLinked() const {
|
||||
return _ownership == Linked;
|
||||
}
|
||||
|
||||
size_t size() const {
|
||||
@ -75,7 +75,7 @@ class String : public SafeBoolIdom<String> {
|
||||
private:
|
||||
const char* _data;
|
||||
size_t _size;
|
||||
bool _isStatic;
|
||||
Ownership _ownership;
|
||||
};
|
||||
|
||||
} // namespace ARDUINOJSON_NAMESPACE
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user