#include <slang/util/Iterator.h>
template<typename DerivedT, typename IteratorCategoryT, typename T, typename DifferenceTypeT = std::ptrdiff_t, typename PointerT = T*, typename ReferenceT = T&>
iterator_facade class
Base class that hides most of the iterator boilerplate from you. Derive from this template and then implement methods as follows:
Forward Iterators: (All of the following methods)
- DerivedT &operator=(const DerivedT& R);
- bool operator==(const DerivedT& R) const;
- const T& operator*() const;
- T& operator*();
- DerivedT& operator++();
Bidirectional Iterators: (All methods of forward iterators, plus the following)
- DerivedT& operator--();
Random-access Iterators: (All methods of bidirectional iterators excluding the following)
- DerivedT& operator++();
- DerivedT& operator--(); (and plus the following)
- bool operator<(const DerivedT& RHS) const;
- difference_type operator-(const DerivedT& R) const;
- DerivedT& operator+=(difference_type N);
- DerivedT& operator-=(difference_type N);
Protected types
- class ReferenceProxy