Skip to content

Commit

Permalink
Fixed error when both ARDUINOJSON_ENABLE_STD_STREAM and `ARDUINOJSO…
Browse files Browse the repository at this point in the history
…N_ENABLE_ARDUINO_STREAM` are set to `1`
  • Loading branch information
bblanchon committed Jan 15, 2017
1 parent 8499f0b commit ec6cbc5
Show file tree
Hide file tree
Showing 16 changed files with 50 additions and 48 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
------
Expand Down
4 changes: 2 additions & 2 deletions include/ArduinoJson/Data/ValueSetter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions include/ArduinoJson/Deserialization/JsonParser.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions include/ArduinoJson/JsonBuffer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion include/ArduinoJson/JsonObject.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion include/ArduinoJson/JsonVariant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
14 changes: 7 additions & 7 deletions include/ArduinoJson/JsonVariantBase.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -92,18 +92,18 @@ 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];
}
//
// JsonObjectSubscript operator[](TKey);
// 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];
Expand All @@ -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];
Expand Down
6 changes: 3 additions & 3 deletions include/ArduinoJson/JsonVariantComparisons.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
};

Expand Down
2 changes: 1 addition & 1 deletion include/ArduinoJson/Serialization/DynamicStringBuilder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
4 changes: 2 additions & 2 deletions include/ArduinoJson/Serialization/JsonPrintable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
14 changes: 7 additions & 7 deletions include/ArduinoJson/StringTraits/ArduinoStream.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
namespace ArduinoJson {
namespace Internals {

struct StdStreamFuncs {
struct ArduinoStreamTraits {
class Iterator {
Stream& _stream;

Expand All @@ -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 {};
}
}
6 changes: 3 additions & 3 deletions include/ArduinoJson/StringTraits/CharPointer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
namespace ArduinoJson {
namespace Internals {

struct CharPtrFuncs {
struct CharPointerTraits {
class Iterator {
const char* _ptr;

Expand Down Expand Up @@ -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 {};
}
}
2 changes: 1 addition & 1 deletion include/ArduinoJson/StringTraits/FlashString.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
namespace ArduinoJson {
namespace Internals {
template <>
struct StringFuncs<const __FlashStringHelper*, void> {
struct StringTraits<const __FlashStringHelper*, void> {
class Iterator {
const char* _ptr;

Expand Down
14 changes: 7 additions & 7 deletions include/ArduinoJson/StringTraits/StdStream.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
namespace ArduinoJson {
namespace Internals {

struct StdStreamFuncs {
struct StdStreamTraits {
class Iterator {
std::istream& _stream;

Expand All @@ -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 {};
}
}
13 changes: 7 additions & 6 deletions include/ArduinoJson/StringTraits/StdString.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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) {
Expand All @@ -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
}
}
6 changes: 3 additions & 3 deletions include/ArduinoJson/StringTraits/StringTraits.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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> {};
}
}

Expand Down

0 comments on commit ec6cbc5

Please sign in to comment.