9 #include <hilti/ast/forward.h>
11 namespace hilti::node {
17 using Set = NodeVector<T>;
26 using BaseIterator = Nodes::const_iterator;
29 using value_type = T*;
30 using difference_type = BaseIterator::difference_type;
31 using pointer = BaseIterator::pointer;
32 using reference = BaseIterator::reference;
33 using iterator_category = BaseIterator::iterator_category;
41 const auto& node()
const {
return *_iter; }
45 T* operator*()
const {
return _value(); }
47 bool operator==(
const RangeIterator& other)
const {
return _iter == other._iter; }
48 bool operator!=(
const RangeIterator& other)
const {
return ! (*
this == other); }
50 auto operator++(
int) {
61 auto& operator+=(difference_type i) {
66 auto& operator-=(difference_type i) {
71 difference_type operator-(
const RangeIterator& other)
const {
return _iter - other._iter; }
72 auto operator-(difference_type i)
const {
return RangeIterator(_iter - i); }
73 auto operator+(difference_type i)
const {
return RangeIterator(_iter + i); }
78 return static_cast<T*
>(*_iter);
96 using value_type =
typename iterator::value_type;
99 Range(
typename NodeVector<T>::const_iterator begin,
typename NodeVector<T>::const_iterator end)
100 : _begin(begin), _end(end) {}
102 explicit Range(
const NodeVector<T>& nodes) :
Range(nodes.begin(), nodes.end()) {}
104 Range(Nodes::const_iterator begin, Nodes::const_iterator end) : _begin(begin), _end(end) {}
112 size_t size()
const {
return static_cast<size_t>(_end - _begin); }
113 T* front()
const {
return *_begin; }
114 bool empty()
const {
return _begin == _end; }
116 operator NodeVector<T>()
const {
119 for (
auto i = _begin; i != _end; i++ )
125 T* operator[](
size_t i)
const {
126 assert(
static_cast<typename RangeIterator<T>::difference_type
>(i) < std::distance(_begin, _end));
127 return *(_begin + i);
130 bool operator==(
const Range& other)
const {
131 if (
this == &other )
134 if ( size() != other.size() )
138 auto y = other._begin;
139 while ( x != _end ) {
140 if ( ! (*x++ == *y++) )
147 Range& operator=(
const Range& other) =
default;
148 Range& operator=(
Range&& other) noexcept =
default;
Definition: node-range.h:92
Definition: node-range.h:25