mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Fix call of overloaded 'String(const char*, int)' is ambiguous
				
					
				
			This commit is contained in:
		| @@ -1,6 +1,11 @@ | ||||
| ArduinoJson: change log | ||||
| ======================= | ||||
|  | ||||
| HEAD | ||||
| ---- | ||||
|  | ||||
| * Fix `call of overloaded 'String(const char*, int)' is ambiguous` | ||||
|  | ||||
| v6.19.2 (2022-02-14) | ||||
| ------- | ||||
|  | ||||
|   | ||||
| @@ -141,13 +141,13 @@ TEST_CASE("JsonObject::operator[]") { | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate a non-static JsonString key") { | ||||
|     obj[JsonString("hello", false)] = "world"; | ||||
|     obj[JsonString("hello", JsonString::Copied)] = "world"; | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should not duplicate a static JsonString key") { | ||||
|     obj[JsonString("hello", true)] = "world"; | ||||
|     obj[JsonString("hello", JsonString::Linked)] = "world"; | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|   | ||||
| @@ -136,7 +136,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|  | ||||
|     REQUIRE(variant.as<long>() == 42L); | ||||
|     REQUIRE(variant.as<JsonString>() == "42"); | ||||
|     REQUIRE(variant.as<JsonString>().isStatic() == true); | ||||
|     REQUIRE(variant.as<JsonString>().isLinked() == true); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(\"hello\")") { | ||||
| @@ -159,7 +159,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<const char*>() == std::string("4.2")); | ||||
|     REQUIRE(variant.as<std::string>() == std::string("4.2")); | ||||
|     REQUIRE(variant.as<JsonString>() == "4.2"); | ||||
|     REQUIRE(variant.as<JsonString>().isStatic() == false); | ||||
|     REQUIRE(variant.as<JsonString>().isLinked() == false); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(\"true\")") { | ||||
|   | ||||
| @@ -98,7 +98,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { | ||||
|     char str[16]; | ||||
|  | ||||
|     strcpy(str, "hello"); | ||||
|     bool result = variant.set(JsonString(str, true)); | ||||
|     bool result = variant.set(JsonString(str, JsonString::Linked)); | ||||
|     strcpy(str, "world"); | ||||
|  | ||||
|     REQUIRE(result == true); | ||||
| @@ -109,7 +109,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { | ||||
|     char str[16]; | ||||
|  | ||||
|     strcpy(str, "hello"); | ||||
|     bool result = variant.set(JsonString(str, false)); | ||||
|     bool result = variant.set(JsonString(str, JsonString::Copied)); | ||||
|     strcpy(str, "world"); | ||||
|  | ||||
|     REQUIRE(result == true); | ||||
|   | ||||
| @@ -13,7 +13,7 @@ TEST_CASE("JsonString") { | ||||
|  | ||||
|     CHECK(s.isNull() == true); | ||||
|     CHECK(s.c_str() == 0); | ||||
|     CHECK(s.isStatic() == true); | ||||
|     CHECK(s.isLinked() == true); | ||||
|   } | ||||
|  | ||||
|   SECTION("Compare null with boolean") { | ||||
| @@ -82,4 +82,11 @@ TEST_CASE("JsonString") { | ||||
|     ss << JsonString("hello world!"); | ||||
|     CHECK(ss.str() == "hello world!"); | ||||
|   } | ||||
|  | ||||
|   SECTION("Construct with a size") { | ||||
|     JsonString s("hello world", 5); | ||||
|  | ||||
|     CHECK(s.size() == 5); | ||||
|     CHECK(s.isLinked() == true); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -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