object_iterator.h 794 B

1234567891011121314151617181920212223242526272829303132333435
  1. #pragma once
  2. #include <iterator>
  3. #include <jvalidate/detail/deref_proxy.h>
  4. namespace jvalidate::adapter::detail {
  5. template <typename It, typename Adapter> class JsonArrayIterator : public It {
  6. public:
  7. using value_type = Adapter;
  8. using reference = Adapter;
  9. using pointer = ::jvalidate::detail::DerefProxy<reference>;
  10. using difference_type = std::ptrdiff_t;
  11. using iterator_category = std::forward_iterator_tag;
  12. JsonArrayIterator() = default;
  13. JsonArrayIterator(It it) : It(it) {}
  14. reference operator*() const { return {It::operator*()}; }
  15. pointer operator->() const { return {operator*()}; }
  16. JsonArrayIterator operator++(int) {
  17. auto tmp = *this;
  18. ++*this;
  19. return tmp;
  20. }
  21. JsonArrayIterator & operator++() {
  22. It::operator++();
  23. return *this;
  24. }
  25. };
  26. }