diff options
Diffstat (limited to 'include/lib/ArduinoJson/Data/ListConstIterator.hpp')
-rw-r--r-- | include/lib/ArduinoJson/Data/ListConstIterator.hpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/include/lib/ArduinoJson/Data/ListConstIterator.hpp b/include/lib/ArduinoJson/Data/ListConstIterator.hpp new file mode 100644 index 0000000..a6af685 --- /dev/null +++ b/include/lib/ArduinoJson/Data/ListConstIterator.hpp @@ -0,0 +1,50 @@ +// ArduinoJson - arduinojson.org +// Copyright Benoit Blanchon 2014-2018 +// MIT License + +#pragma once + +#include "ListNode.hpp" + +namespace ArduinoJson { +namespace Internals { + +// A read-only forward itertor for List<T> +template <typename T> +class ListConstIterator { + public: + explicit ListConstIterator(const ListNode<T> *node = NULL) : _node(node) {} + + const T &operator*() const { + return _node->content; + } + const T *operator->() { + return &_node->content; + } + + bool operator==(const ListConstIterator<T> &other) const { + return _node == other._node; + } + + bool operator!=(const ListConstIterator<T> &other) const { + return _node != other._node; + } + + ListConstIterator<T> &operator++() { + if (_node) _node = _node->next; + return *this; + } + + ListConstIterator<T> &operator+=(size_t distance) { + while (_node && distance) { + _node = _node->next; + --distance; + } + return *this; + } + + private: + const ListNode<T> *_node; +}; +} +} |