From 429d5011b478084dc2ed07a1818dbd26548f931b Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 3 Nov 2014 14:33:33 +0100 Subject: [PATCH] Made it possible to use const JsonObject& --- include/ArduinoJson/JsonObject.hpp | 6 ++++-- src/JsonObject.cpp | 12 +++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/include/ArduinoJson/JsonObject.hpp b/include/ArduinoJson/JsonObject.hpp index b91ba7c5..c4f9a4fb 100644 --- a/include/ArduinoJson/JsonObject.hpp +++ b/include/ArduinoJson/JsonObject.hpp @@ -34,7 +34,9 @@ class JsonObject : public JsonPrintable, int size() const; JsonValue &at(key_type key); - JsonValue &operator[](key_type key) { return at(key); } + const JsonValue &at(key_type key) const; + JsonValue &operator[](key_type key); + const JsonValue &operator[](key_type key) const { return at(key); } void remove(key_type key); @@ -68,7 +70,7 @@ class JsonObject : public JsonPrintable, void addNode(Internals::JsonObjectNode *nodeToAdd); void removeNode(Internals::JsonObjectNode *nodeToRemove); - Internals::JsonObjectNode *getNodeAt(key_type key); + Internals::JsonObjectNode *getNodeAt(key_type key) const; Internals::JsonObjectNode *getOrCreateNodeAt(key_type key); JsonBuffer *_buffer; diff --git a/src/JsonObject.cpp b/src/JsonObject.cpp index deedca0c..7ee8ffb1 100644 --- a/src/JsonObject.cpp +++ b/src/JsonObject.cpp @@ -27,6 +27,16 @@ int JsonObject::size() const { } JsonValue &JsonObject::at(const char *key) { + JsonObjectNode *node = getNodeAt(key); + return node ? node->pair.value : JsonValue::invalid(); +} + +const JsonValue &JsonObject::at(const char *key) const { + JsonObjectNode *node = getNodeAt(key); + return node ? node->pair.value : JsonValue::invalid(); +} + +JsonValue &JsonObject::operator[](const char *key) { JsonObjectNode *node = getOrCreateNodeAt(key); return node ? node->pair.value : JsonValue::invalid(); } @@ -47,7 +57,7 @@ JsonObject &JsonObject::createNestedObject(const char *key) { return object; } -JsonObjectNode *JsonObject::getNodeAt(const char *key) { +JsonObjectNode *JsonObject::getNodeAt(const char *key) const { for (JsonObjectNode *node = _firstNode; node; node = node->next) { if (!strcmp(node->pair.key, key)) return node; }