Просмотр исходного кода

Extracted method getMatchingPair()

Benoit Blanchon 11 лет назад
Родитель
Сommit
1bc45f1fd7
2 измененных файлов с 18 добавлено и 22 удалено
  1. 16 16
      JsonGenerator/JsonObjectBase.cpp
  2. 2 6
      JsonGenerator/JsonObjectBase.h

+ 16 - 16
JsonGenerator/JsonObjectBase.cpp

@@ -4,6 +4,7 @@
 */
 
 #include "JsonObjectBase.h"
+#include <string.h> // 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;
 }

+ 2 - 6
JsonGenerator/JsonObjectBase.h

@@ -7,7 +7,6 @@
 
 #include "JsonPrintable.h"
 #include "EscapedString.h"
-#include <string.h> // 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;
         };
     }
 }