Răsfoiți Sursa

Fixed failing test

Benoit Blanchon 11 ani în urmă
părinte
comite
85ffb83aa6

+ 6 - 0
JsonGenerator/EscapedString.h

@@ -6,6 +6,7 @@
 #pragma once
 
 #include "Print.h"
+#include <string.h> // for strcmp
 
 namespace ArduinoJson
 {
@@ -21,6 +22,11 @@ namespace ArduinoJson
             }
 
             size_t printTo(Print&) const;
+            
+            bool equals(char const* s)
+            {
+                return strcmp(s, rawString) == 0;
+            }
 
         private:
             const char* rawString;

+ 17 - 0
JsonGenerator/JsonObjectBase.cpp

@@ -33,4 +33,21 @@ size_t JsonObjectBase::printTo(Print& p) const
     n += p.write('}');
 
     return n;
+}
+
+JsonObjectBase::KeyValuePair* JsonObjectBase::getMatchingPair(char const* key)
+{
+    for (int i = 0; i < count; ++i)
+    {
+        if (items[i].key.equals(key))
+        {
+            return &items[i];
+        }
+    }
+
+    if (count >= capacity) return 0;
+    
+    KeyValuePair* p = &items[count++];
+    p->key.set(key);
+    return p;
 }

+ 9 - 9
JsonGenerator/JsonObjectBase.h

@@ -19,22 +19,20 @@ namespace ArduinoJson
             template<typename T>
             void add(const char* key, T value)
             {
-                if (count >= capacity) return;
+                KeyValuePair* pair = getMatchingPair(key);
+                if (!pair) return;
 
-                items[count].key.set(key);
-                items[count].value.set(value);
-                count++;
+                pair->value.set(value);
             }
 
             template<int DIGITS>
             void add(const char* key, double value)
             {
-                if (count >= capacity) return;
+                KeyValuePair* pair = getMatchingPair(key);
+                if (!pair) return;
 
-                items[count].key.set(key);
-                items[count].value.set<DIGITS>(value);
-                count++;
-            }
+                pair->value.set<DIGITS>(value);
+            }           
 
             using JsonPrintable::printTo;
 
@@ -53,6 +51,8 @@ namespace ArduinoJson
             {
             }
 
+            KeyValuePair* getMatchingPair(const char* key);
+
         private:
             KeyValuePair* items;
             int capacity, count;