| 12345678910111213141516171819202122232425262728293031323334353637 |
- #pragma once
- #include <iterator>
- #include <string>
- #include <jvalidate/detail/deref_proxy.h>
- namespace jvalidate::adapter::detail {
- template <typename It, typename Adapter> class JsonObjectIterator : public It {
- public:
- using value_type = std::pair<std::string, Adapter>;
- using reference = std::pair<std::string, Adapter>;
- using pointer = ::jvalidate::detail::DerefProxy<reference>;
- using difference_type = std::ptrdiff_t;
- using iterator_category = std::forward_iterator_tag;
- JsonObjectIterator() = default;
- JsonObjectIterator(It it) : It(it) {}
- reference operator*() const { return {Adapter::key(*this), Adapter(It::operator->())}; }
- pointer operator->() const { return {operator*()}; }
- JsonObjectIterator operator++(int) {
- auto tmp = *this;
- ++*this;
- return tmp;
- }
- JsonObjectIterator & operator++() {
- It::operator++();
- return *this;
- }
- };
- }
|