forked from bblanchon/ArduinoJson
Fixed ambiguous overload with JsonArraySubscript
and JsonObjectSubscript
(issue #122)
This commit is contained in:
@ -63,7 +63,8 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
||||
FORCE_INLINE bool add(const String &value);
|
||||
FORCE_INLINE bool add(JsonArray &array);
|
||||
FORCE_INLINE bool add(JsonObject &object);
|
||||
FORCE_INLINE bool add(const JsonVariant &object);
|
||||
template <typename T>
|
||||
FORCE_INLINE bool add(const T &value);
|
||||
|
||||
// Sets the value at specified index.
|
||||
FORCE_INLINE void set(size_t index, bool value);
|
||||
@ -81,7 +82,8 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
||||
FORCE_INLINE void set(size_t index, const String &value);
|
||||
FORCE_INLINE void set(size_t index, JsonArray &array);
|
||||
FORCE_INLINE void set(size_t index, JsonObject &object);
|
||||
FORCE_INLINE void set(size_t index, const JsonVariant &object);
|
||||
template <typename T>
|
||||
FORCE_INLINE void set(size_t index, const T &value);
|
||||
|
||||
// Gets the value at the specified index.
|
||||
FORCE_INLINE JsonVariant get(size_t index) const;
|
||||
|
@ -77,8 +77,9 @@ inline bool JsonArray::add(JsonObject &object) {
|
||||
return addNode<JsonObject &>(object);
|
||||
}
|
||||
|
||||
inline bool JsonArray::add(const JsonVariant &object) {
|
||||
return addNode<const JsonVariant &>(object);
|
||||
template <typename T>
|
||||
inline bool JsonArray::add(const T &variant) {
|
||||
return addNode<const JsonVariant &>(variant);
|
||||
}
|
||||
|
||||
template <typename TValue>
|
||||
@ -149,8 +150,9 @@ inline void JsonArray::set(size_t index, JsonObject &object) {
|
||||
return setNodeAt<JsonObject &>(index, object);
|
||||
}
|
||||
|
||||
inline void JsonArray::set(size_t index, const JsonVariant &object) {
|
||||
return setNodeAt<const JsonVariant &>(index, object);
|
||||
template <typename T>
|
||||
inline void JsonArray::set(size_t index, const T &variant) {
|
||||
return setNodeAt<const JsonVariant &>(index, variant);
|
||||
}
|
||||
|
||||
template <typename TValue>
|
||||
|
@ -8,6 +8,11 @@
|
||||
|
||||
#include "JsonSubscriptBase.hpp"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4522)
|
||||
#endif
|
||||
|
||||
namespace ArduinoJson {
|
||||
class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
||||
public:
|
||||
@ -16,6 +21,15 @@ class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
||||
|
||||
using JsonSubscriptBase<JsonArraySubscript>::operator=;
|
||||
|
||||
JsonArraySubscript& operator=(const JsonArraySubscript& src) {
|
||||
return assign<const JsonVariant&>(src);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
JsonArraySubscript& operator=(const T& src) {
|
||||
return assign<const JsonVariant&>(src);
|
||||
}
|
||||
|
||||
FORCE_INLINE bool success() const { return _index < _array.size(); }
|
||||
|
||||
FORCE_INLINE operator JsonVariant() const { return _array.get(_index); }
|
||||
@ -52,3 +66,7 @@ inline std::ostream& operator<<(std::ostream& os,
|
||||
#endif
|
||||
|
||||
} // namespace ArduinoJson
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
@ -65,6 +65,9 @@ class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
||||
FORCE_INLINE bool set(const char* key, JsonArray& array);
|
||||
FORCE_INLINE bool set(const char* key, JsonObject& object);
|
||||
FORCE_INLINE bool set(const char* key, const JsonVariant& value);
|
||||
template <typename T>
|
||||
FORCE_INLINE bool set(const char* key, const T& value);
|
||||
|
||||
FORCE_INLINE bool set(const String& key, bool value);
|
||||
FORCE_INLINE bool set(const String& key, float value, uint8_t decimals = 2);
|
||||
FORCE_INLINE bool set(const String& key, double value, uint8_t decimals = 2);
|
||||
@ -81,6 +84,8 @@ class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
||||
FORCE_INLINE bool set(const String& key, JsonArray& array);
|
||||
FORCE_INLINE bool set(const String& key, JsonObject& object);
|
||||
FORCE_INLINE bool set(const String& key, const JsonVariant& value);
|
||||
template <typename T>
|
||||
FORCE_INLINE bool set(const String& key, const T& value);
|
||||
|
||||
// Gets the value associated with the specified key.
|
||||
FORCE_INLINE JsonVariant get(JsonObjectKey) const;
|
||||
|
@ -116,6 +116,10 @@ inline bool JsonObject::set(const char *key, JsonObject &object) {
|
||||
inline bool JsonObject::set(const char *key, const JsonVariant &value) {
|
||||
return setNodeAt<const char *, const JsonVariant &>(key, value);
|
||||
}
|
||||
template <typename T>
|
||||
inline bool JsonObject::set(const char *key, const T &value) {
|
||||
return setNodeAt<const char *, JsonVariant>(key, value);
|
||||
}
|
||||
inline bool JsonObject::set(const String &key, bool value) {
|
||||
return setNodeAt<const String &, bool>(key, value);
|
||||
}
|
||||
@ -166,6 +170,10 @@ inline bool JsonObject::set(const String &key, JsonObject &object) {
|
||||
inline bool JsonObject::set(const String &key, const JsonVariant &value) {
|
||||
return setNodeAt<const String &, const JsonVariant &>(key, value);
|
||||
}
|
||||
template <typename T>
|
||||
inline bool JsonObject::set(const String &key, const T &value) {
|
||||
return setNodeAt<const String &, JsonVariant>(key, value);
|
||||
}
|
||||
|
||||
template <typename TKey, typename TValue>
|
||||
inline bool JsonObject::setNodeAt(TKey key, TValue value) {
|
||||
|
@ -8,6 +8,11 @@
|
||||
|
||||
#include "JsonSubscriptBase.hpp"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4522)
|
||||
#endif
|
||||
|
||||
namespace ArduinoJson {
|
||||
|
||||
template <typename TKey>
|
||||
@ -19,6 +24,17 @@ class JsonObjectSubscript
|
||||
|
||||
using JsonSubscriptBase<JsonObjectSubscript<TKey> >::operator=;
|
||||
|
||||
JsonObjectSubscript<TKey>& operator=(const JsonObjectSubscript<TKey>& src) {
|
||||
return JsonSubscriptBase<JsonObjectSubscript<TKey> >::template assign<
|
||||
JsonVariant>(src);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
JsonObjectSubscript<TKey>& operator=(const T& src) {
|
||||
return JsonSubscriptBase<JsonObjectSubscript<TKey> >::template assign<
|
||||
JsonVariant>(src);
|
||||
}
|
||||
|
||||
FORCE_INLINE bool success() const { return _object.containsKey(_key); }
|
||||
|
||||
FORCE_INLINE operator JsonVariant() const { return _object.get(_key); }
|
||||
@ -60,4 +76,8 @@ inline std::ostream& operator<<(
|
||||
return source.printTo(os);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} // namespace ArduinoJson
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
@ -68,10 +68,10 @@ class JsonSubscriptBase : public JsonVariantBase<TImpl> {
|
||||
}
|
||||
|
||||
FORCE_INLINE TImpl& operator=(JsonVariant value) {
|
||||
return assign<JsonVariant>(value);
|
||||
return assign<const JsonVariant&>(value);
|
||||
}
|
||||
|
||||
private:
|
||||
protected:
|
||||
template <typename TValue>
|
||||
FORCE_INLINE TImpl& assign(TValue value) {
|
||||
TImpl* that = static_cast<TImpl*>(this);
|
||||
|
Reference in New Issue
Block a user