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 | ArduinoJson: change log | ||||||
| ======================= | ======================= | ||||||
|  |  | ||||||
|  | HEAD | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | * Fix `call of overloaded 'String(const char*, int)' is ambiguous` | ||||||
|  |  | ||||||
| v6.19.2 (2022-02-14) | v6.19.2 (2022-02-14) | ||||||
| ------- | ------- | ||||||
|  |  | ||||||
|   | |||||||
| @@ -141,13 +141,13 @@ TEST_CASE("JsonObject::operator[]") { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("should duplicate a non-static JsonString key") { |   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); |     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(5); | ||||||
|     REQUIRE(expectedSize == doc.memoryUsage()); |     REQUIRE(expectedSize == doc.memoryUsage()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("should not duplicate a static JsonString key") { |   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); |     const size_t expectedSize = JSON_OBJECT_SIZE(1); | ||||||
|     REQUIRE(expectedSize == doc.memoryUsage()); |     REQUIRE(expectedSize == doc.memoryUsage()); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -136,7 +136,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|  |  | ||||||
|     REQUIRE(variant.as<long>() == 42L); |     REQUIRE(variant.as<long>() == 42L); | ||||||
|     REQUIRE(variant.as<JsonString>() == "42"); |     REQUIRE(variant.as<JsonString>() == "42"); | ||||||
|     REQUIRE(variant.as<JsonString>().isStatic() == true); |     REQUIRE(variant.as<JsonString>().isLinked() == true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(\"hello\")") { |   SECTION("set(\"hello\")") { | ||||||
| @@ -159,7 +159,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<const char*>() == std::string("4.2")); |     REQUIRE(variant.as<const char*>() == std::string("4.2")); | ||||||
|     REQUIRE(variant.as<std::string>() == std::string("4.2")); |     REQUIRE(variant.as<std::string>() == std::string("4.2")); | ||||||
|     REQUIRE(variant.as<JsonString>() == "4.2"); |     REQUIRE(variant.as<JsonString>() == "4.2"); | ||||||
|     REQUIRE(variant.as<JsonString>().isStatic() == false); |     REQUIRE(variant.as<JsonString>().isLinked() == false); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(\"true\")") { |   SECTION("set(\"true\")") { | ||||||
|   | |||||||
| @@ -98,7 +98,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { | |||||||
|     char str[16]; |     char str[16]; | ||||||
|  |  | ||||||
|     strcpy(str, "hello"); |     strcpy(str, "hello"); | ||||||
|     bool result = variant.set(JsonString(str, true)); |     bool result = variant.set(JsonString(str, JsonString::Linked)); | ||||||
|     strcpy(str, "world"); |     strcpy(str, "world"); | ||||||
|  |  | ||||||
|     REQUIRE(result == true); |     REQUIRE(result == true); | ||||||
| @@ -109,7 +109,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { | |||||||
|     char str[16]; |     char str[16]; | ||||||
|  |  | ||||||
|     strcpy(str, "hello"); |     strcpy(str, "hello"); | ||||||
|     bool result = variant.set(JsonString(str, false)); |     bool result = variant.set(JsonString(str, JsonString::Copied)); | ||||||
|     strcpy(str, "world"); |     strcpy(str, "world"); | ||||||
|  |  | ||||||
|     REQUIRE(result == true); |     REQUIRE(result == true); | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ TEST_CASE("JsonString") { | |||||||
|  |  | ||||||
|     CHECK(s.isNull() == true); |     CHECK(s.isNull() == true); | ||||||
|     CHECK(s.c_str() == 0); |     CHECK(s.c_str() == 0); | ||||||
|     CHECK(s.isStatic() == true); |     CHECK(s.isLinked() == true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("Compare null with boolean") { |   SECTION("Compare null with boolean") { | ||||||
| @@ -82,4 +82,11 @@ TEST_CASE("JsonString") { | |||||||
|     ss << JsonString("hello world!"); |     ss << JsonString("hello world!"); | ||||||
|     CHECK(ss.str() == "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()) { |   for (VariantSlot* s = src._head; s; s = s->next()) { | ||||||
|     VariantData* var; |     VariantData* var; | ||||||
|     if (s->key() != 0) { |     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)); |       var = addMember(adaptString(key), pool, getStringStoragePolicy(key)); | ||||||
|     } else { |     } else { | ||||||
|       var = addElement(pool); |       var = addElement(pool); | ||||||
|   | |||||||
| @@ -13,7 +13,8 @@ class Pair { | |||||||
|  public: |  public: | ||||||
|   Pair(MemoryPool* pool, VariantSlot* slot) { |   Pair(MemoryPool* pool, VariantSlot* slot) { | ||||||
|     if (slot) { |     if (slot) { | ||||||
|       _key = String(slot->key(), !slot->ownsKey()); |       _key = String(slot->key(), | ||||||
|  |                     slot->ownsKey() ? String::Copied : String::Linked); | ||||||
|       _value = VariantRef(pool, slot->data()); |       _value = VariantRef(pool, slot->data()); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -35,7 +36,8 @@ class PairConst { | |||||||
|  public: |  public: | ||||||
|   PairConst(const VariantSlot* slot) { |   PairConst(const VariantSlot* slot) { | ||||||
|     if (slot) { |     if (slot) { | ||||||
|       _key = String(slot->key(), !slot->ownsKey()); |       _key = String(slot->key(), | ||||||
|  |                     slot->ownsKey() ? String::Copied : String::Linked); | ||||||
|       _value = VariantConstRef(slot->data()); |       _value = VariantConstRef(slot->data()); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ class StringCopier { | |||||||
|   String save() { |   String save() { | ||||||
|     ARDUINOJSON_ASSERT(_ptr); |     ARDUINOJSON_ASSERT(_ptr); | ||||||
|     ARDUINOJSON_ASSERT(_size < _capacity);  // needs room for the terminator |     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) { |   void append(const char* s) { | ||||||
| @@ -52,7 +52,7 @@ class StringCopier { | |||||||
|     ARDUINOJSON_ASSERT(_ptr); |     ARDUINOJSON_ASSERT(_ptr); | ||||||
|     ARDUINOJSON_ASSERT(_size < _capacity); |     ARDUINOJSON_ASSERT(_size < _capacity); | ||||||
|     _ptr[_size] = 0; |     _ptr[_size] = 0; | ||||||
|     return String(_ptr, _size, false); |     return String(_ptr, _size, String::Copied); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ class StringMover { | |||||||
|  |  | ||||||
|   String str() const { |   String str() const { | ||||||
|     _writePtr[0] = 0;  // terminator |     _writePtr[0] = 0;  // terminator | ||||||
|     return String(_startPtr, size(), true); |     return String(_startPtr, size(), String::Linked); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   size_t size() const { |   size_t size() const { | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ namespace ARDUINOJSON_NAMESPACE { | |||||||
| struct LinkStringStoragePolicy { | struct LinkStringStoragePolicy { | ||||||
|   template <typename TAdaptedString, typename TCallback> |   template <typename TAdaptedString, typename TCallback> | ||||||
|   bool store(TAdaptedString str, MemoryPool *, TCallback callback) { |   bool store(TAdaptedString str, MemoryPool *, TCallback callback) { | ||||||
|     String storedString(str.data(), str.size(), true); |     String storedString(str.data(), str.size(), String::Linked); | ||||||
|     callback(storedString); |     callback(storedString); | ||||||
|     return !str.isNull(); |     return !str.isNull(); | ||||||
|   } |   } | ||||||
| @@ -50,7 +50,7 @@ inline LinkStringStoragePolicy getStringStoragePolicy(const char *) { | |||||||
| } | } | ||||||
|  |  | ||||||
| inline LinkOrCopyStringStoragePolicy getStringStoragePolicy(const String &s) { | inline LinkOrCopyStringStoragePolicy getStringStoragePolicy(const String &s) { | ||||||
|   return LinkOrCopyStringStoragePolicy(s.isStatic()); |   return LinkOrCopyStringStoragePolicy(s.isLinked()); | ||||||
| } | } | ||||||
|  |  | ||||||
| }  // namespace ARDUINOJSON_NAMESPACE | }  // namespace ARDUINOJSON_NAMESPACE | ||||||
|   | |||||||
| @@ -14,15 +14,15 @@ namespace ARDUINOJSON_NAMESPACE { | |||||||
|  |  | ||||||
| class String : public SafeBoolIdom<String> { | class String : public SafeBoolIdom<String> { | ||||||
|  public: |  public: | ||||||
|   String() : _data(0), _size(0), _isStatic(true) {} |   enum Ownership { Copied, Linked }; | ||||||
|  |  | ||||||
|   String(const char* data, bool isStaticData = true) |   String() : _data(0), _size(0), _ownership(Linked) {} | ||||||
|       : _data(data), |  | ||||||
|         _size(data ? ::strlen(data) : 0), |  | ||||||
|         _isStatic(isStaticData) {} |  | ||||||
|  |  | ||||||
|   String(const char* data, size_t sz, bool isStaticData = true) |   String(const char* data, Ownership ownership = Linked) | ||||||
|       : _data(data), _size(sz), _isStatic(isStaticData) {} |       : _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 { |   const char* c_str() const { | ||||||
|     return _data; |     return _data; | ||||||
| @@ -32,8 +32,8 @@ class String : public SafeBoolIdom<String> { | |||||||
|     return !_data; |     return !_data; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   bool isStatic() const { |   bool isLinked() const { | ||||||
|     return _isStatic; |     return _ownership == Linked; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   size_t size() const { |   size_t size() const { | ||||||
| @@ -75,7 +75,7 @@ class String : public SafeBoolIdom<String> { | |||||||
|  private: |  private: | ||||||
|   const char* _data; |   const char* _data; | ||||||
|   size_t _size; |   size_t _size; | ||||||
|   bool _isStatic; |   Ownership _ownership; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| }  // namespace ARDUINOJSON_NAMESPACE | }  // namespace ARDUINOJSON_NAMESPACE | ||||||
|   | |||||||
| @@ -208,7 +208,7 @@ class MemoryPoolPrint : public Print { | |||||||
|  |  | ||||||
|   String str() { |   String str() { | ||||||
|     ARDUINOJSON_ASSERT(_size < _capacity); |     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) { |   size_t write(uint8_t c) { | ||||||
|   | |||||||
| @@ -210,7 +210,7 @@ class VariantData { | |||||||
|  |  | ||||||
|   void setString(String s) { |   void setString(String s) { | ||||||
|     ARDUINOJSON_ASSERT(s); |     ARDUINOJSON_ASSERT(s); | ||||||
|     if (s.isStatic()) |     if (s.isLinked()) | ||||||
|       setType(VALUE_IS_LINKED_STRING); |       setType(VALUE_IS_LINKED_STRING); | ||||||
|     else |     else | ||||||
|       setType(VALUE_IS_OWNED_STRING); |       setType(VALUE_IS_OWNED_STRING); | ||||||
|   | |||||||
| @@ -73,9 +73,11 @@ inline T VariantData::asFloat() const { | |||||||
| inline String VariantData::asString() const { | inline String VariantData::asString() const { | ||||||
|   switch (type()) { |   switch (type()) { | ||||||
|     case VALUE_IS_LINKED_STRING: |     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: |     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: |     default: | ||||||
|       return String(); |       return String(); | ||||||
|   } |   } | ||||||
| @@ -174,7 +176,7 @@ template <typename TAdaptedString, typename TCallback> | |||||||
| bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool, | bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool, | ||||||
|                                     TCallback callback) { |                                     TCallback callback) { | ||||||
|   const char *copy = pool->saveString(str); |   const char *copy = pool->saveString(str); | ||||||
|   String storedString(copy, str.size(), false); |   String storedString(copy, str.size(), String::Copied); | ||||||
|   callback(storedString); |   callback(storedString); | ||||||
|   return copy != 0; |   return copy != 0; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -78,7 +78,7 @@ class VariantSlot { | |||||||
|  |  | ||||||
|   void setKey(String k) { |   void setKey(String k) { | ||||||
|     ARDUINOJSON_ASSERT(k); |     ARDUINOJSON_ASSERT(k); | ||||||
|     if (k.isStatic()) |     if (k.isLinked()) | ||||||
|       _flags &= VALUE_MASK; |       _flags &= VALUE_MASK; | ||||||
|     else |     else | ||||||
|       _flags |= OWNED_KEY_BIT; |       _flags |= OWNED_KEY_BIT; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user