31 #ifndef DOXYGEN_SHOULD_SKIP_THIS 66 : index(iteratorIndex)
75 swap(index, other.index);
145 return index != other.index;
155 return index == other.index;
166 return lo <= value && value < hi;
301 : range(iteratorRange)
302 , position(iteratorPosition)
311 swap(range, other.range);
312 swap(position, other.position);
361 return position.
x != other.position.x || position.
y != other.position.y;
371 return position.
x == other.position.x && position.
y == other.position.y;
375 void step() noexcept {
378 if (position.
x >= range.
hi) {
379 position.
x = range.
lo;
449 : position(iteratorPosition)
450 , parent(iteratorParent)
452 if (isNotNeighbor(position)) {
463 : position(iteratorPosition)
473 swap(position, other.position);
474 swap(parent, other.parent);
523 return position.
x != other.position.x || position.
y != other.position.y;
533 return position.
x == other.position.x && position.
y == other.position.y;
537 void step() noexcept {
541 if (position.
x >= parent->
first.hi) {
542 position.
x = parent->
first.lo;
545 }
while (isNotNeighbor(position));
549 return other.
x == parent->
origin.x && other.
y == parent->
origin.y;
618 : position(iteratorPosition)
619 , parent(iteratorParent)
621 if (isNotNeighbor(position)) {
632 : position(iteratorPosition)
642 swap(position, other.position);
643 swap(parent, other.parent);
692 return position.
x != other.position.x || position.
y != other.position.y;
702 return position.
x == other.position.x && position.
y == other.position.y;
706 void step() noexcept {
710 if (position.
x >= parent->
first.hi) {
711 position.
x = parent->
first.lo;
714 if (position.
y >= parent->
second.hi) {
718 }
while (isNotNeighbor(position));
722 return isOrigin(other) || isOutOfDiamond(position);
726 return other.
x == parent->
origin.x && other.
y == parent->
origin.y;
729 bool isOutOfDiamond(
Vector<T, 2> other)
const noexcept {
766 #ifndef DOXYGEN_SHOULD_SKIP_THIS Range< T > second
The range in the second dimension.
Definition: Range.h:426
Vector< T, 2 > position
Definition: Range.h:608
Range< T > first
The range in the first dimension.
Definition: Range.h:593
An iterator for a 2D range.
Definition: Range.h:601
T x
First coordinate in the (x,y) representation.
Definition: Vector.h:507
A range iterator.
Definition: Range.h:51
std::forward_iterator_tag iterator_category
Definition: Range.h:606
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:370
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:660
std::forward_iterator_tag iterator_category
Definition: Range.h:437
std::ptrdiff_t difference_type
Definition: Range.h:285
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:73
constexpr Iterator(T iteratorIndex) noexcept
Constructor.
Definition: Range.h:65
A half-open range of values.
Definition: Range.h:43
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:522
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:669
Range< T > second
The range in the second dimension.
Definition: Range.h:594
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:144
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:329
Vector< T, 2 > origin
Definition: Range.h:595
Vector< T, 2 > position
Definition: Range.h:439
const NeighborDiamondRange< T > * parent
Definition: Range.h:609
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:631
Range< T > first
The range in the first dimension.
Definition: Range.h:278
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:338
constexpr bool isEmpty() const noexcept
Check if the range is empty.
Definition: Range.h:204
T lo
The lower endpoint (included)
Definition: Range.h:44
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:401
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:740
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:111
A 2D range.
Definition: Range.h:424
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:154
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:185
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:360
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:309
constexpr T absdiff(T lhs, T rhs)
Absolute difference of two values.
Definition: Math.h:342
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:348
T y
Second coordinate in the (x,y) representation.
Definition: Vector.h:518
reference operator*() noexcept
Dereference operator.
Definition: Range.h:83
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:462
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborSquareRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:448
Range< T > second
The range in the second dimension.
Definition: Range.h:279
Iterator & operator--() noexcept
Decrement operator (prefix)
Definition: Range.h:122
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:559
reference operator*() noexcept
Dereference operator.
Definition: Range.h:320
value_type reference
Definition: Range.h:55
std::ptrdiff_t difference_type
Definition: Range.h:602
T hi
The higher endpoint (excluded)
Definition: Range.h:45
An iterator for a 2D range.
Definition: Range.h:284
Vector< T, 2 > origin
Definition: Range.h:427
constexpr bool contains(T value) const noexcept
Check if a value is in a range.
Definition: Range.h:165
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:92
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:471
void swap(typename Range< T >::Iterator &lhs, typename Range< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:225
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:175
reference operator*() noexcept
Dereference operator.
Definition: Range.h:651
The namespace for gf classes.
Definition: Action.h:35
T value_type
Definition: Range.h:53
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:491
std::forward_iterator_tag iterator_category
Definition: Range.h:289
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:532
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:640
Range< T > first
The range in the first dimension.
Definition: Range.h:425
An iterator for a 2D range.
Definition: Range.h:432
Range< T > range
Definition: Range.h:291
std::bidirectional_iterator_tag iterator_category
Definition: Range.h:56
void swap(typename NeighborSquareRange< T >::Iterator &lhs, typename NeighborSquareRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:580
A 2D range.
Definition: Range.h:592
void swap(typename PositionRange< T >::Iterator &lhs, typename PositionRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:412
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:750
Iterator operator--(int) noexcept
Decrement operator (postfix)
Definition: Range.h:132
T radius
Definition: Range.h:596
A 2D vector.
Definition: Vector.h:316
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:391
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborDiamondRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:617
A 2D range.
Definition: Range.h:277
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:569
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:691
reference operator*() noexcept
Dereference operator.
Definition: Range.h:482
constexpr Iterator(Range< T > iteratorRange, Vector< T, 2 > iteratorPosition) noexcept
Constructor.
Definition: Range.h:300
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:500
Vector< T, 2 > position
Definition: Range.h:292
T index
The index in the range.
Definition: Range.h:58
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:679
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:701
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:510
constexpr T length() const noexcept
Get the length of the range.
Definition: Range.h:194
void swap(typename NeighborDiamondRange< T >::Iterator &lhs, typename NeighborDiamondRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:761
std::ptrdiff_t difference_type
Definition: Range.h:433
value_type pointer
Definition: Range.h:54
std::ptrdiff_t difference_type
Definition: Range.h:52
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:101
const NeighborSquareRange< T > * parent
Definition: Range.h:440
constexpr bool isValid() const noexcept
Check is the range is valid.
Definition: Range.h:214