From c6d11294e45f19c8401d68e23ba530f1ffc8a210 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 5 Nov 2014 09:04:26 +0100 Subject: [PATCH] Replaced JsonArrayIterator and JsonArrayConstIterator by a template --- .../ArduinoJson/Internals/JsonIterator.hpp | 37 +++++++++++++++++++ include/ArduinoJson/JsonArray.hpp | 10 +++-- .../ArduinoJson/JsonArrayConstIterator.hpp | 37 ------------------- include/ArduinoJson/JsonArrayIterator.hpp | 36 ------------------ 4 files changed, 43 insertions(+), 77 deletions(-) create mode 100644 include/ArduinoJson/Internals/JsonIterator.hpp delete mode 100644 include/ArduinoJson/JsonArrayConstIterator.hpp delete mode 100644 include/ArduinoJson/JsonArrayIterator.hpp diff --git a/include/ArduinoJson/Internals/JsonIterator.hpp b/include/ArduinoJson/Internals/JsonIterator.hpp new file mode 100644 index 00000000..5905509d --- /dev/null +++ b/include/ArduinoJson/Internals/JsonIterator.hpp @@ -0,0 +1,37 @@ +// Copyright Benoit Blanchon 2014 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson + +#pragma once + +namespace ArduinoJson { +namespace Internals { + +template +class JsonIterator { + public: + explicit JsonIterator(TNode *node) : _node(node) {} + + TValue &operator*() const { return _node->value; } + TValue *operator->() { return &_node->value; } + + bool operator==(const JsonIterator &other) const { + return _node == other._node; + } + + bool operator!=(const JsonIterator &other) const { + return _node != other._node; + } + + JsonIterator &operator++() { + if (_node) _node = _node->next; + return *this; + } + + private: + TNode *_node; +}; +} +} diff --git a/include/ArduinoJson/JsonArray.hpp b/include/ArduinoJson/JsonArray.hpp index 490eb5f7..afe0390b 100644 --- a/include/ArduinoJson/JsonArray.hpp +++ b/include/ArduinoJson/JsonArray.hpp @@ -6,10 +6,10 @@ #pragma once +#include "Internals/JsonArrayNode.hpp" +#include "Internals/JsonIterator.hpp" #include "Internals/JsonPrintable.hpp" #include "Internals/ReferenceType.hpp" -#include "JsonArrayConstIterator.hpp" -#include "JsonArrayIterator.hpp" #define JSON_ARRAY_SIZE(NUMBER_OF_ELEMENTS) \ (sizeof(JsonArray) + (NUMBER_OF_ELEMENTS) * sizeof(Internals::JsonArrayNode)) @@ -25,8 +25,10 @@ class JsonArray : public Internals::JsonPrintable, public: typedef JsonVariant value_type; - typedef JsonArrayIterator iterator; - typedef JsonArrayConstIterator const_iterator; + typedef Internals::JsonIterator + iterator; + typedef Internals::JsonIterator + const_iterator; int size() const; diff --git a/include/ArduinoJson/JsonArrayConstIterator.hpp b/include/ArduinoJson/JsonArrayConstIterator.hpp deleted file mode 100644 index 228db139..00000000 --- a/include/ArduinoJson/JsonArrayConstIterator.hpp +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright Benoit Blanchon 2014 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson - -#pragma once - -#include "Internals/JsonArrayNode.hpp" - -namespace ArduinoJson { - -class JsonArrayConstIterator { - public: - explicit JsonArrayConstIterator(Internals::JsonArrayNode *node) - : _node(node) {} - - const JsonVariant &operator*() const { return _node->value; } - const JsonVariant *operator->() { return &_node->value; } - - bool operator==(const JsonArrayConstIterator &other) const { - return _node == other._node; - } - - bool operator!=(const JsonArrayConstIterator &other) const { - return _node != other._node; - } - - JsonArrayConstIterator &operator++() { - if (_node) _node = _node->next; - return *this; - } - - private: - Internals::JsonArrayNode *_node; -}; -} diff --git a/include/ArduinoJson/JsonArrayIterator.hpp b/include/ArduinoJson/JsonArrayIterator.hpp deleted file mode 100644 index f77f39a8..00000000 --- a/include/ArduinoJson/JsonArrayIterator.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright Benoit Blanchon 2014 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson - -#pragma once - -#include "Internals/JsonArrayNode.hpp" - -namespace ArduinoJson { - -class JsonArrayIterator { - public: - explicit JsonArrayIterator(Internals::JsonArrayNode *node) : _node(node) {} - - JsonVariant &operator*() const { return _node->value; } - JsonVariant *operator->() { return &_node->value; } - - bool operator==(const JsonArrayIterator &other) const { - return _node == other._node; - } - - bool operator!=(const JsonArrayIterator &other) const { - return _node != other._node; - } - - JsonArrayIterator &operator++() { - if (_node) _node = _node->next; - return *this; - } - - private: - Internals::JsonArrayNode *_node; -}; -}