Added JsonObjectBase::remove()

This commit is contained in:
Benoit Blanchon
2014-08-03 13:16:35 +02:00
parent 817cc09975
commit 8e81b9bb26
4 changed files with 61 additions and 6 deletions

View File

@ -81,4 +81,12 @@ JsonValue& JsonObjectBase::operator[](JsonKey key)
bool JsonObjectBase::containsKey(JsonKey key) const bool JsonObjectBase::containsKey(JsonKey key) const
{ {
return getMatchingPair(key) != 0; return getMatchingPair(key) != 0;
}
void JsonObjectBase::remove(JsonKey key)
{
KeyValuePair* match = getMatchingPair(key);
if (match == 0) return;
*match = items[--count];
} }

View File

@ -18,8 +18,8 @@ namespace ArduinoJson
{ {
public: public:
JsonValue& operator[](JsonKey); JsonValue& operator[](JsonKey);
bool containsKey(JsonKey) const; bool containsKey(JsonKey) const;
void remove(JsonKey key);
template<typename T> template<typename T>
void add(JsonKey key, T value) void add(JsonKey key, T value)
@ -53,7 +53,6 @@ namespace ArduinoJson
private: private:
KeyValuePair* items; KeyValuePair* items;
int capacity, count; int capacity, count;
static JsonValue nullValue; static JsonValue nullValue;
KeyValuePair* getMatchingPair(JsonKey key) const; KeyValuePair* getMatchingPair(JsonKey key) const;

View File

@ -22,14 +22,35 @@ namespace JsonGeneratorTests
{ {
mustNotContain("key"); mustNotContain("key");
} }
TEST_METHOD(OneString) TEST_METHOD(TwoStrings)
{ {
object["key"] = "value"; object["key1"] = "value1";
object["key2"] = "value2";
mustContain("key", "value"); mustContain("key1", "value1");
mustContain("key2", "value2");
} }
TEST_METHOD(RemoveFirst)
{
object["key1"] = "value1";
object["key2"] = "value2";
object.remove("key1");
mustNotContain("key1");
mustContain("key2", "value2");
}
TEST_METHOD(RemoveLast)
{
object["key1"] = "value1";
object["key2"] = "value2";
object.remove("key2");
mustContain("key1", "value1");
mustNotContain("key2");
}
private: private:

View File

@ -38,6 +38,33 @@ namespace JsonGeneratorTests
outputMustBe("{\"key1\":\"value1\",\"key2\":\"value2\"}"); outputMustBe("{\"key1\":\"value1\",\"key2\":\"value2\"}");
} }
TEST_METHOD(RemoveFirst)
{
object["key1"] = "value1";
object["key2"] = "value2";
object.remove("key1");
outputMustBe("{\"key2\":\"value2\"}");
}
TEST_METHOD(RemoveLast)
{
object["key1"] = "value1";
object["key2"] = "value2";
object.remove("key2");
outputMustBe("{\"key1\":\"value1\"}");
}
TEST_METHOD(RemoveUnexistingKey)
{
object["key1"] = "value1";
object["key2"] = "value2";
object.remove("key3");
outputMustBe("{\"key1\":\"value1\",\"key2\":\"value2\"}");
}
TEST_METHOD(ReplaceExistingKey) TEST_METHOD(ReplaceExistingKey)
{ {
object["key"] = "value1"; object["key"] = "value1";