mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Fixed error when both ARDUINOJSON_ENABLE_STD_STREAM and ARDUINOJSON_ENABLE_ARDUINO_STREAM are set to 1
				
					
				
			This commit is contained in:
		| @@ -6,6 +6,7 @@ HEAD | ||||
|  | ||||
| * Fixed error when assigning a `volatile int` to a `JsonVariant` (issue #415) | ||||
| * Fixed errors with Variable Length Arrays (issue #416) | ||||
| * Fixed error when both `ARDUINOJSON_ENABLE_STD_STREAM` and `ARDUINOJSON_ENABLE_ARDUINO_STREAM` are set to `1` | ||||
|  | ||||
| v5.8.0 | ||||
| ------ | ||||
|   | ||||
| @@ -26,8 +26,8 @@ struct ValueSetter { | ||||
| }; | ||||
|  | ||||
| template <typename TSource> | ||||
| struct ValueSetter<TSource, typename TypeTraits::EnableIf< | ||||
|                                 StringFuncs<TSource>::should_duplicate>::type> { | ||||
| struct ValueSetter<TSource, typename TypeTraits::EnableIf<StringTraits< | ||||
|                                 TSource>::should_duplicate>::type> { | ||||
|   template <typename TDestination> | ||||
|   static bool set(JsonBuffer* buffer, TDestination& destination, | ||||
|                   const TSource& source) { | ||||
|   | ||||
| @@ -74,7 +74,7 @@ class JsonParser { | ||||
|  | ||||
| template <typename TJsonBuffer, typename TString> | ||||
| struct JsonParserBuilder { | ||||
|   typedef typename Internals::StringFuncs<TString>::Iterator InputIterator; | ||||
|   typedef typename Internals::StringTraits<TString>::Iterator InputIterator; | ||||
|   typedef JsonParser<StringReader<InputIterator>, TJsonBuffer &> TParser; | ||||
|  | ||||
|   static TParser makeParser(TJsonBuffer *buffer, TString &json, | ||||
| @@ -85,7 +85,7 @@ struct JsonParserBuilder { | ||||
|  | ||||
| template <typename TJsonBuffer> | ||||
| struct JsonParserBuilder<TJsonBuffer, char *> { | ||||
|   typedef typename Internals::StringFuncs<char *>::Iterator InputIterator; | ||||
|   typedef typename Internals::StringTraits<char *>::Iterator InputIterator; | ||||
|   typedef JsonParser<StringReader<InputIterator>, StringWriter> TParser; | ||||
|  | ||||
|   static TParser makeParser(TJsonBuffer *buffer, char *json, | ||||
|   | ||||
| @@ -61,14 +61,14 @@ class JsonBuffer { | ||||
|   typename TypeTraits::EnableIf<!TypeTraits::IsArray<TString>::value, | ||||
|                                 char *>::type | ||||
|   strdup(const TString &src) { | ||||
|     return Internals::StringFuncs<TString>::duplicate(src, this); | ||||
|     return Internals::StringTraits<TString>::duplicate(src, this); | ||||
|   } | ||||
|   // | ||||
|   // char* strdup(TValue); | ||||
|   // TValue = const char*, const char[N], const FlashStringHelper* | ||||
|   template <typename TString> | ||||
|   char *strdup(const TString *src) { | ||||
|     return Internals::StringFuncs<const TString *>::duplicate(src, this); | ||||
|     return Internals::StringTraits<const TString *>::duplicate(src, this); | ||||
|   } | ||||
|  | ||||
|   // Allocates n bytes in the JsonBuffer. | ||||
|   | ||||
| @@ -282,7 +282,7 @@ class JsonObject : public Internals::JsonPrintable<JsonObject>, | ||||
|   template <typename TStringRef> | ||||
|   node_type* findNode(TStringRef key) const { | ||||
|     for (node_type* node = _firstNode; node; node = node->next) { | ||||
|       if (Internals::StringFuncs<TStringRef>::equals(key, node->content.key)) | ||||
|       if (Internals::StringTraits<TStringRef>::equals(key, node->content.key)) | ||||
|         return node; | ||||
|     } | ||||
|     return NULL; | ||||
|   | ||||
| @@ -163,7 +163,7 @@ class JsonVariant : public JsonVariantBase<JsonVariant> { | ||||
|   // std::string as<std::string>() const; | ||||
|   // String as<String>() const; | ||||
|   template <typename T> | ||||
|   typename TypeTraits::EnableIf<Internals::StringFuncs<T>::has_append, T>::type | ||||
|   typename TypeTraits::EnableIf<Internals::StringTraits<T>::has_append, T>::type | ||||
|   as() const { | ||||
|     const char *cstr = asString(); | ||||
|     if (cstr) return T(cstr); | ||||
|   | ||||
| @@ -83,7 +83,7 @@ class JsonVariantBase : public Internals::JsonPrintable<TImpl> { | ||||
|   // TKey = const std::string&, const String& | ||||
|   template <typename TString> | ||||
|   FORCE_INLINE typename TypeTraits::EnableIf< | ||||
|       Internals::StringFuncs<TString>::has_equals, | ||||
|       Internals::StringTraits<TString>::has_equals, | ||||
|       const JsonObjectSubscript<const TString &> >::type | ||||
|   operator[](const TString &key) const { | ||||
|     return asObject()[key]; | ||||
| @@ -92,10 +92,10 @@ class JsonVariantBase : public Internals::JsonPrintable<TImpl> { | ||||
|   // const JsonObjectSubscript operator[](TKey) const; | ||||
|   // TKey = const char*, const char[N], const FlashStringHelper* | ||||
|   template <typename TString> | ||||
|   FORCE_INLINE | ||||
|       typename TypeTraits::EnableIf<Internals::StringFuncs<TString>::has_equals, | ||||
|                                     JsonObjectSubscript<const TString &> >::type | ||||
|       operator[](const TString &key) { | ||||
|   FORCE_INLINE typename TypeTraits::EnableIf< | ||||
|       Internals::StringTraits<TString>::has_equals, | ||||
|       JsonObjectSubscript<const TString &> >::type | ||||
|   operator[](const TString &key) { | ||||
|     return asObject()[key]; | ||||
|   } | ||||
|   // | ||||
| @@ -103,7 +103,7 @@ class JsonVariantBase : public Internals::JsonPrintable<TImpl> { | ||||
|   // TKey = const std::string&, const String& | ||||
|   template <typename TString> | ||||
|   FORCE_INLINE typename TypeTraits::EnableIf< | ||||
|       Internals::StringFuncs<TString *>::has_equals, | ||||
|       Internals::StringTraits<TString *>::has_equals, | ||||
|       JsonObjectSubscript<const TString *> >::type | ||||
|   operator[](const TString *key) { | ||||
|     return asObject()[key]; | ||||
| @@ -113,7 +113,7 @@ class JsonVariantBase : public Internals::JsonPrintable<TImpl> { | ||||
|   // TKey = const char*, const char[N], const FlashStringHelper* | ||||
|   template <typename TString> | ||||
|   FORCE_INLINE typename TypeTraits::EnableIf< | ||||
|       Internals::StringFuncs<TString *>::has_equals, | ||||
|       Internals::StringTraits<TString *>::has_equals, | ||||
|       const JsonObjectSubscript<const TString *> >::type | ||||
|   operator[](const TString *key) const { | ||||
|     return asObject()[key]; | ||||
|   | ||||
| @@ -21,11 +21,11 @@ struct JsonVariantComparer { | ||||
|  | ||||
| template <typename TVariant, typename TString> | ||||
| struct JsonVariantComparer< | ||||
|     TVariant, TString, typename TypeTraits::EnableIf< | ||||
|                            Internals::StringFuncs<TString>::has_equals>::type> { | ||||
|     TVariant, TString, typename TypeTraits::EnableIf<Internals::StringTraits< | ||||
|                            TString>::has_equals>::type> { | ||||
|   static bool equals(const TVariant &variant, const TString &comparand) { | ||||
|     const char *value = variant.template as<const char *>(); | ||||
|     return Internals::StringFuncs<TString>::equals(comparand, value); | ||||
|     return Internals::StringTraits<TString>::equals(comparand, value); | ||||
|   } | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -20,7 +20,7 @@ class DynamicStringBuilder : public Print { | ||||
|   DynamicStringBuilder(TString &str) : _str(str) {} | ||||
|  | ||||
|   virtual size_t write(uint8_t c) { | ||||
|     StringFuncs<TString>::append(_str, static_cast<char>(c)); | ||||
|     StringTraits<TString>::append(_str, static_cast<char>(c)); | ||||
|     return 1; | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -56,7 +56,7 @@ class JsonPrintable { | ||||
|   } | ||||
|  | ||||
|   template <typename TString> | ||||
|   typename TypeTraits::EnableIf<StringFuncs<TString>::has_append, size_t>::type | ||||
|   typename TypeTraits::EnableIf<StringTraits<TString>::has_append, size_t>::type | ||||
|   printTo(TString &str) const { | ||||
|     DynamicStringBuilder<TString> sb(str); | ||||
|     return printTo(sb); | ||||
| @@ -83,7 +83,7 @@ class JsonPrintable { | ||||
|   } | ||||
|  | ||||
|   template <typename TString> | ||||
|   typename TypeTraits::EnableIf<StringFuncs<TString>::has_append, size_t>::type | ||||
|   typename TypeTraits::EnableIf<StringTraits<TString>::has_append, size_t>::type | ||||
|   prettyPrintTo(TString &str) const { | ||||
|     DynamicStringBuilder<TString> sb(str); | ||||
|     return prettyPrintTo(sb); | ||||
|   | ||||
| @@ -14,7 +14,7 @@ | ||||
| namespace ArduinoJson { | ||||
| namespace Internals { | ||||
|  | ||||
| struct StdStreamFuncs { | ||||
| struct ArduinoStreamTraits { | ||||
|   class Iterator { | ||||
|     Stream& _stream; | ||||
|  | ||||
| @@ -29,11 +29,11 @@ struct StdStreamFuncs { | ||||
| }; | ||||
|  | ||||
| template <typename TStream> | ||||
| struct StringFuncs<TStream, | ||||
|                    // match any type that is derived from std::istream: | ||||
|                    typename TypeTraits::EnableIf<TypeTraits::IsBaseOf< | ||||
|                        Stream, typename TypeTraits::RemoveReference< | ||||
|                                    TStream>::type>::value>::type> | ||||
|     : StdStreamFuncs {}; | ||||
| struct StringTraits<TStream, | ||||
|                     // match any type that is derived from Stream: | ||||
|                     typename TypeTraits::EnableIf<TypeTraits::IsBaseOf< | ||||
|                         Stream, typename TypeTraits::RemoveReference< | ||||
|                                     TStream>::type>::value>::type> | ||||
|     : ArduinoStreamTraits {}; | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
| namespace ArduinoJson { | ||||
| namespace Internals { | ||||
|  | ||||
| struct CharPtrFuncs { | ||||
| struct CharPointerTraits { | ||||
|   class Iterator { | ||||
|     const char* _ptr; | ||||
|  | ||||
| @@ -43,9 +43,9 @@ struct CharPtrFuncs { | ||||
| }; | ||||
|  | ||||
| template <> | ||||
| struct StringFuncs<const char*, void> : CharPtrFuncs {}; | ||||
| struct StringTraits<const char*, void> : CharPointerTraits {}; | ||||
|  | ||||
| template <> | ||||
| struct StringFuncs<char*, void> : CharPtrFuncs {}; | ||||
| struct StringTraits<char*, void> : CharPointerTraits {}; | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
| namespace ArduinoJson { | ||||
| namespace Internals { | ||||
| template <> | ||||
| struct StringFuncs<const __FlashStringHelper*, void> { | ||||
| struct StringTraits<const __FlashStringHelper*, void> { | ||||
|   class Iterator { | ||||
|     const char* _ptr; | ||||
|  | ||||
|   | ||||
| @@ -15,7 +15,7 @@ | ||||
| namespace ArduinoJson { | ||||
| namespace Internals { | ||||
|  | ||||
| struct StdStreamFuncs { | ||||
| struct StdStreamTraits { | ||||
|   class Iterator { | ||||
|     std::istream& _stream; | ||||
|  | ||||
| @@ -32,11 +32,11 @@ struct StdStreamFuncs { | ||||
| }; | ||||
|  | ||||
| template <typename TStream> | ||||
| struct StringFuncs<TStream, | ||||
|                    // match any type that is derived from std::istream: | ||||
|                    typename TypeTraits::EnableIf<TypeTraits::IsBaseOf< | ||||
|                        std::istream, typename TypeTraits::RemoveReference< | ||||
|                                          TStream>::type>::value>::type> | ||||
|     : StdStreamFuncs {}; | ||||
| struct StringTraits<TStream, | ||||
|                     // match any type that is derived from std::istream: | ||||
|                     typename TypeTraits::EnableIf<TypeTraits::IsBaseOf< | ||||
|                         std::istream, typename TypeTraits::RemoveReference< | ||||
|                                           TStream>::type>::value>::type> | ||||
|     : StdStreamTraits {}; | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ namespace ArduinoJson { | ||||
| namespace Internals { | ||||
|  | ||||
| template <typename TString> | ||||
| struct StdStringFuncs { | ||||
| struct StdStringTraits { | ||||
|   template <typename Buffer> | ||||
|   static char* duplicate(const TString& str, Buffer* buffer) { | ||||
|     if (!str.c_str()) return NULL;  // <- Arduino string can return NULL | ||||
| @@ -29,8 +29,8 @@ struct StdStringFuncs { | ||||
|     return static_cast<char*>(dup); | ||||
|   } | ||||
|  | ||||
|   struct Iterator : CharPtrFuncs::Iterator { | ||||
|     Iterator(const TString& str) : CharPtrFuncs::Iterator(str.c_str()) {} | ||||
|   struct Iterator : CharPointerTraits::Iterator { | ||||
|     Iterator(const TString& str) : CharPointerTraits::Iterator(str.c_str()) {} | ||||
|   }; | ||||
|  | ||||
|   static bool equals(const TString& str, const char* expected) { | ||||
| @@ -48,14 +48,15 @@ struct StdStringFuncs { | ||||
|  | ||||
| #if ARDUINOJSON_ENABLE_ARDUINO_STRING | ||||
| template <> | ||||
| struct StringFuncs<String, void> : StdStringFuncs<String> {}; | ||||
| struct StringTraits<String, void> : StdStringTraits<String> {}; | ||||
| template <> | ||||
| struct StringFuncs<StringSumHelper, void> : StdStringFuncs<StringSumHelper> {}; | ||||
| struct StringTraits<StringSumHelper, void> : StdStringTraits<StringSumHelper> { | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| #if ARDUINOJSON_ENABLE_STD_STRING | ||||
| template <> | ||||
| struct StringFuncs<std::string, void> : StdStringFuncs<std::string> {}; | ||||
| struct StringTraits<std::string, void> : StdStringTraits<std::string> {}; | ||||
| #endif | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -13,13 +13,13 @@ namespace ArduinoJson { | ||||
| namespace Internals { | ||||
|  | ||||
| template <typename TString, typename Enable = void> | ||||
| struct StringFuncs {}; | ||||
| struct StringTraits {}; | ||||
|  | ||||
| template <typename TString> | ||||
| struct StringFuncs<const TString, void> : StringFuncs<TString> {}; | ||||
| struct StringTraits<const TString, void> : StringTraits<TString> {}; | ||||
|  | ||||
| template <typename TString> | ||||
| struct StringFuncs<TString&, void> : StringFuncs<TString> {}; | ||||
| struct StringTraits<TString&, void> : StringTraits<TString> {}; | ||||
| } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user