forked from bblanchon/ArduinoJson
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