diff --git a/JsonGenerator/JsonObjectBase.cpp b/JsonGenerator/JsonObjectBase.cpp index c05e1825..c63931f5 100644 --- a/JsonGenerator/JsonObjectBase.cpp +++ b/JsonGenerator/JsonObjectBase.cpp @@ -4,6 +4,7 @@ */ #include "JsonObjectBase.h" +#include // for strcmp using namespace ArduinoJson::Generator; using namespace ArduinoJson::Internals; @@ -38,25 +39,34 @@ size_t JsonObjectBase::printTo(Print& p) const return n; } -JsonValue& JsonObjectBase::operator[](char const* key) +JsonObjectBase::KeyValuePair* JsonObjectBase::getMatchingPair(char const* key) const { KeyValuePair* p = items; for (int i = count; i > 0; --i) { - if (p->matches(key)) - return p->value; + if (!strcmp(p->key, key)) + return p; p++; } + return 0; +} + +JsonValue& JsonObjectBase::operator[](char const* key) +{ + KeyValuePair* match = getMatchingPair(key); JsonValue* value; + if (match) + return match->value; + if (count < capacity) { + items[count].key = key; + value = &items[count].value; count++; - p->key = key; - value = &p->value; } else { @@ -69,15 +79,5 @@ JsonValue& JsonObjectBase::operator[](char const* key) bool JsonObjectBase::containsKey(char const* key) const { - KeyValuePair* p = items; - - for (int i = count; i > 0; --i) - { - if (p->matches(key)) - return true; - - p++; - } - - return false; + return getMatchingPair(key) != 0; } \ No newline at end of file diff --git a/JsonGenerator/JsonObjectBase.h b/JsonGenerator/JsonObjectBase.h index 3514fa53..baa56cd0 100644 --- a/JsonGenerator/JsonObjectBase.h +++ b/JsonGenerator/JsonObjectBase.h @@ -7,7 +7,6 @@ #include "JsonPrintable.h" #include "EscapedString.h" -#include // for strcmp namespace ArduinoJson { @@ -43,11 +42,6 @@ namespace ArduinoJson { const char* key; JsonValue value; - - bool matches(const char* candidateKey) const - { - return strcmp(key, candidateKey) == 0; - } }; JsonObjectBase(KeyValuePair* items, int capacity) @@ -60,6 +54,8 @@ namespace ArduinoJson int capacity, count; static JsonValue nullValue; + + KeyValuePair* getMatchingPair(const char* key) const; }; } } \ No newline at end of file