31 #ifndef DOXYGEN_SHOULD_SKIP_THIS 66 : index(iteratorIndex)
76 swap(index, other.index);
146 return index != other.index;
156 return index == other.index;
168 return lo <= value && value < hi;
304 : range(iteratorRange)
305 , position(iteratorPosition)
315 swap(range, other.range);
316 swap(position, other.position);
365 return position.
x != other.position.x || position.
y != other.position.y;
375 return position.
x == other.position.x && position.
y == other.position.y;
379 void step() noexcept {
382 if (position.
x >= range.
hi) {
383 position.
x = range.
lo;
454 : position(iteratorPosition)
455 , parent(iteratorParent)
457 if (isNotNeighbor(position)) {
468 : position(iteratorPosition)
479 swap(position, other.position);
480 swap(parent, other.parent);
529 return position.
x != other.position.x || position.
y != other.position.y;
539 return position.
x == other.position.x && position.
y == other.position.y;
543 void step() noexcept {
547 if (position.
x >= parent->
first.hi) {
548 position.
x = parent->
first.lo;
551 }
while (isNotNeighbor(position));
555 return other.
x == parent->
origin.x && other.
y == parent->
origin.y;
625 : position(iteratorPosition)
626 , parent(iteratorParent)
628 if (isNotNeighbor(position)) {
639 : position(iteratorPosition)
650 swap(position, other.position);
651 swap(parent, other.parent);
700 return position.
x != other.position.x || position.
y != other.position.y;
710 return position.
x == other.position.x && position.
y == other.position.y;
714 void step() noexcept {
718 if (position.
x >= parent->
first.hi) {
719 position.
x = parent->
first.lo;
722 if (position.
y >= parent->
second.hi) {
726 }
while (isNotNeighbor(position));
730 return isOrigin(other) || isOutOfDiamond(position);
734 return other.
x == parent->
origin.x && other.
y == parent->
origin.y;
737 bool isOutOfDiamond(
Vector<T, 2> other)
const noexcept {
775 #ifndef DOXYGEN_SHOULD_SKIP_THIS Range< T > second
The range in the second dimension.
Definition: Range.h:431
Vector< T, 2 > position
Definition: Range.h:615
Range< T > first
The range in the first dimension.
Definition: Range.h:600
An iterator for a 2D range.
Definition: Range.h:608
T x
First coordinate in the (x,y) representation.
Definition: Vector.h:509
A range iterator.
Definition: Range.h:51
std::forward_iterator_tag iterator_category
Definition: Range.h:613
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:374
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:668
std::forward_iterator_tag iterator_category
Definition: Range.h:442
std::ptrdiff_t difference_type
Definition: Range.h:288
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:74
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:528
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:677
Range< T > second
The range in the second dimension.
Definition: Range.h:601
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:145
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:333
Vector< T, 2 > origin
Definition: Range.h:602
Vector< T, 2 > position
Definition: Range.h:444
const NeighborDiamondRange< T > * parent
Definition: Range.h:616
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:638
Range< T > first
The range in the first dimension.
Definition: Range.h:281
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:342
constexpr bool isEmpty() const noexcept
Check if the range is empty.
Definition: Range.h:206
T lo
The lower endpoint (included)
Definition: Range.h:44
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:405
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:748
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:112
A 2D range.
Definition: Range.h:429
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:155
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:187
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:364
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:313
constexpr T absdiff(T lhs, T rhs)
Absolute difference of two values.
Definition: Math.h:313
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:352
T y
Second coordinate in the (x,y) representation.
Definition: Vector.h:520
reference operator*() noexcept
Dereference operator.
Definition: Range.h:84
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:467
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborSquareRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:453
Range< T > second
The range in the second dimension.
Definition: Range.h:282
Iterator & operator--() noexcept
Decrement operator (prefix)
Definition: Range.h:123
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:565
reference operator*() noexcept
Dereference operator.
Definition: Range.h:324
value_type reference
Definition: Range.h:55
std::ptrdiff_t difference_type
Definition: Range.h:609
T hi
The higher endpoint (excluded)
Definition: Range.h:45
An iterator for a 2D range.
Definition: Range.h:287
Vector< T, 2 > origin
Definition: Range.h:432
constexpr bool contains(T value) const noexcept
Check if a value is in a range.
Definition: Range.h:167
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:93
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:477
void swap(typename Range< T >::Iterator &lhs, typename Range< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:228
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:177
reference operator*() noexcept
Dereference operator.
Definition: Range.h:659
The namespace for gf classes.
Definition: Action.h:35
T value_type
Definition: Range.h:53
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:497
std::forward_iterator_tag iterator_category
Definition: Range.h:292
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:538
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:648
Range< T > first
The range in the first dimension.
Definition: Range.h:430
An iterator for a 2D range.
Definition: Range.h:437
Range< T > range
Definition: Range.h:294
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:587
A 2D range.
Definition: Range.h:599
void swap(typename PositionRange< T >::Iterator &lhs, typename PositionRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:417
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:758
Iterator operator--(int) noexcept
Decrement operator (postfix)
Definition: Range.h:133
T radius
Definition: Range.h:603
A 2D vector.
Definition: Vector.h:316
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:395
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborDiamondRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:624
A 2D range.
Definition: Range.h:280
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:575
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:699
reference operator*() noexcept
Dereference operator.
Definition: Range.h:488
constexpr Iterator(Range< T > iteratorRange, Vector< T, 2 > iteratorPosition) noexcept
Constructor.
Definition: Range.h:303
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:506
Vector< T, 2 > position
Definition: Range.h:295
T index
The index in the range.
Definition: Range.h:58
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:687
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:709
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:516
constexpr T length() const noexcept
Get the length of the range.
Definition: Range.h:196
void swap(typename NeighborDiamondRange< T >::Iterator &lhs, typename NeighborDiamondRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:770
std::ptrdiff_t difference_type
Definition: Range.h:438
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:102
const NeighborSquareRange< T > * parent
Definition: Range.h:445
constexpr bool isValid() const noexcept
Check is the range is valid.
Definition: Range.h:216