Added JsonArrayIterator

This commit is contained in:
Benoit Blanchon
2014-10-22 17:59:59 +02:00
parent 9946abf731
commit d842e246c9
6 changed files with 87 additions and 5 deletions

View File

@ -3,16 +3,13 @@
namespace ArduinoJson namespace ArduinoJson
{ {
class JsonBuffer; class JsonBuffer;
namespace Internals namespace Internals
{ {
class JsonWriter; class JsonWriter;
class JsonNodeIterator;
class JsonNode class JsonNode
{ {
friend class JsonNodeIterator;
enum JsonNodeType enum JsonNodeType
{ {
JSON_UNDEFINED, JSON_UNDEFINED,
@ -63,6 +60,8 @@ namespace ArduinoJson
} }
JsonNode* next;
void writeTo(JsonWriter&); // TODO: <- move in JsonNodeSerializer void writeTo(JsonWriter&); // TODO: <- move in JsonNodeSerializer
void setAsArray(JsonBuffer* buffer) void setAsArray(JsonBuffer* buffer)
@ -175,7 +174,6 @@ namespace ArduinoJson
private: private:
JsonNodeType type; JsonNodeType type;
JsonNode* next;
JsonNodeContent content; JsonNodeContent content;
inline void writeArrayTo(JsonWriter&);// TODO: <- move in JsonNodeSerializer inline void writeArrayTo(JsonWriter&);// TODO: <- move in JsonNodeSerializer

View File

@ -6,6 +6,7 @@ namespace ArduinoJson
{ {
namespace Internals namespace Internals
{ {
// TODO: replace by JsonArrayIterator and JsonObjectIterator
class JsonNodeIterator class JsonNodeIterator
{ {
public: public:

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "JsonContainer.hpp" #include "JsonContainer.hpp"
#include "JsonArrayIterator.hpp"
namespace ArduinoJson namespace ArduinoJson
{ {
@ -32,5 +33,12 @@ namespace ArduinoJson
{ {
return _node && _node->isArray(); return _node && _node->isArray();
} }
JsonArrayIterator begin();
JsonArrayIterator end()
{
return JsonArrayIterator(0);
}
}; };
} }

View File

@ -0,0 +1,42 @@
#pragma once
#include "ArduinoJson/JsonValue.hpp"
namespace ArduinoJson
{
class JsonArray;
class JsonArrayIterator
{
friend class JsonArray;
public:
explicit JsonArrayIterator(Internals::JsonNode* node)
: _node(node)
{
}
void operator++()
{
_node = _node->next;
}
JsonValue operator*() const
{
return JsonValue(_node);
}
bool operator==(const JsonArrayIterator& other) const
{
return _node == other._node;
}
bool operator!=(const JsonArrayIterator& other) const
{
return _node != other._node;
}
private:
Internals::JsonNode* _node;
};
}

View File

@ -86,4 +86,12 @@ JsonObject JsonArray::createNestedObject()
} }
return JsonObject(node); return JsonObject(node);
}
JsonArrayIterator JsonArray::begin()
{
if (!_node)
return end();
return JsonArrayIterator(_node->getContainerChild());
} }

View File

@ -0,0 +1,25 @@
#include <gtest/gtest.h>
#include <ArduinoJson/JsonArray.hpp>
#include <ArduinoJson/StaticJsonBuffer.hpp>
using namespace ArduinoJson;
TEST(JsonArray_Iterator_Test, SimpleTest)
{
StaticJsonBuffer<42> jsonBuffer;
JsonArray array = jsonBuffer.createArray();
array.add(12);
array.add(34);
JsonArrayIterator it = array.begin();
JsonArrayIterator end = array.end();
EXPECT_NE(end, it);
EXPECT_EQ(12, static_cast<int>(*it));
++it;
EXPECT_NE(end, it);
EXPECT_EQ(34, static_cast<int>(*it));
++it;
EXPECT_EQ(array.end(), it);
}