32 #ifndef DOXYGEN_SHOULD_SKIP_THIS 67 : index(iteratorIndex)
76 swap(index, other.index);
146 return index != other.index;
156 return index == other.index;
167 return lo <= value && value < hi;
265 extern template struct GF_CORE_API
Range<int>;
303 : range(iteratorRange)
304 , position(iteratorPosition)
313 swap(range, other.range);
314 swap(position, other.position);
363 return position.
x != other.position.x || position.
y != other.position.y;
373 return position.
x == other.position.x && position.
y == other.position.y;
377 void step() noexcept {
380 if (position.
x >= range.
hi) {
381 position.
x = range.
lo;
452 : position(iteratorPosition)
453 , parent(iteratorParent)
455 if (isNotNeighbor(position)) {
466 : position(iteratorPosition)
476 swap(position, other.position);
477 swap(parent, other.parent);
526 return position.
x != other.position.x || position.
y != other.position.y;
536 return position.
x == other.position.x && position.
y == other.position.y;
540 void step() noexcept {
544 if (position.
x >= parent->
first.hi) {
545 position.
x = parent->
first.lo;
548 }
while (isNotNeighbor(position));
552 return other.
x == parent->
origin.x && other.
y == parent->
origin.y;
622 : position(iteratorPosition)
623 , parent(iteratorParent)
625 if (isNotNeighbor(position)) {
636 : position(iteratorPosition)
646 swap(position, other.position);
647 swap(parent, other.parent);
696 return position.
x != other.position.x || position.
y != other.position.y;
706 return position.
x == other.position.x && position.
y == other.position.y;
710 void step() noexcept {
714 if (position.
x >= parent->
first.hi) {
715 position.
x = parent->
first.lo;
718 if (position.
y >= parent->
second.hi) {
722 }
while (isNotNeighbor(position));
726 return isOrigin(other) || isOutOfDiamond(position);
730 return other.
x == parent->
origin.x && other.
y == parent->
origin.y;
733 bool isOutOfDiamond(
Vector<T, 2> other)
const noexcept {
770 #ifndef DOXYGEN_SHOULD_SKIP_THIS Range< T > second
The range in the second dimension.
Definition: Range.h:428
Vector< T, 2 > position
Definition: Range.h:612
Range< T > first
The range in the first dimension.
Definition: Range.h:596
An iterator for a 2D range.
Definition: Range.h:605
T x
First coordinate in the (x,y) representation.
Definition: Vector.h:514
A range iterator.
Definition: Range.h:52
std::forward_iterator_tag iterator_category
Definition: Range.h:610
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:372
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:664
std::forward_iterator_tag iterator_category
Definition: Range.h:440
std::ptrdiff_t difference_type
Definition: Range.h:287
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:74
constexpr Iterator(T iteratorIndex) noexcept
Constructor.
Definition: Range.h:66
A half-open range of values.
Definition: Range.h:44
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:525
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:673
Range< T > second
The range in the second dimension.
Definition: Range.h:597
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:145
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:331
Vector< T, 2 > origin
Definition: Range.h:598
Vector< T, 2 > position
Definition: Range.h:442
const NeighborDiamondRange< T > * parent
Definition: Range.h:613
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:635
Range< T > first
The range in the first dimension.
Definition: Range.h:279
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:340
constexpr bool isEmpty() const noexcept
Check if the range is empty.
Definition: Range.h:205
T lo
The lower endpoint (included)
Definition: Range.h:45
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:403
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:744
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:112
A 2D range.
Definition: Range.h:426
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:186
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:362
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:311
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:350
T y
Second coordinate in the (x,y) representation.
Definition: Vector.h:525
reference operator*() noexcept
Dereference operator.
Definition: Range.h:84
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:465
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborSquareRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:451
Range< T > second
The range in the second dimension.
Definition: Range.h:280
Iterator & operator--() noexcept
Decrement operator (prefix)
Definition: Range.h:123
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:562
reference operator*() noexcept
Dereference operator.
Definition: Range.h:322
value_type reference
Definition: Range.h:56
std::ptrdiff_t difference_type
Definition: Range.h:606
T hi
The higher endpoint (excluded)
Definition: Range.h:46
An iterator for a 2D range.
Definition: Range.h:286
Vector< T, 2 > origin
Definition: Range.h:429
constexpr bool contains(T value) const noexcept
Check if a value is in a range.
Definition: Range.h:166
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:93
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:474
void swap(typename Range< T >::Iterator &lhs, typename Range< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:226
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:176
reference operator*() noexcept
Dereference operator.
Definition: Range.h:655
The namespace for gf classes.
Definition: Action.h:35
T value_type
Definition: Range.h:54
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:494
std::forward_iterator_tag iterator_category
Definition: Range.h:291
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:535
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:644
Range< T > first
The range in the first dimension.
Definition: Range.h:427
An iterator for a 2D range.
Definition: Range.h:435
Range< T > range
Definition: Range.h:293
std::bidirectional_iterator_tag iterator_category
Definition: Range.h:57
void swap(typename NeighborSquareRange< T >::Iterator &lhs, typename NeighborSquareRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:583
A 2D range.
Definition: Range.h:595
void swap(typename PositionRange< T >::Iterator &lhs, typename PositionRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:414
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:754
Iterator operator--(int) noexcept
Decrement operator (postfix)
Definition: Range.h:133
T radius
Definition: Range.h:599
A 2D vector.
Definition: Vector.h:316
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:393
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborDiamondRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:621
A 2D range.
Definition: Range.h:278
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:572
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:695
reference operator*() noexcept
Dereference operator.
Definition: Range.h:485
constexpr Iterator(Range< T > iteratorRange, Vector< T, 2 > iteratorPosition) noexcept
Constructor.
Definition: Range.h:302
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:503
Vector< T, 2 > position
Definition: Range.h:294
T index
The index in the range.
Definition: Range.h:59
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:683
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:705
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:513
constexpr T length() const noexcept
Get the length of the range.
Definition: Range.h:195
void swap(typename NeighborDiamondRange< T >::Iterator &lhs, typename NeighborDiamondRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:765
std::ptrdiff_t difference_type
Definition: Range.h:436
constexpr T absdiff(T lhs, T rhs)
Absolute difference of two values.
Definition: Math.h:352
value_type pointer
Definition: Range.h:55
std::ptrdiff_t difference_type
Definition: Range.h:53
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:102
const NeighborSquareRange< T > * parent
Definition: Range.h:443
constexpr bool isValid() const noexcept
Check is the range is valid.
Definition: Range.h:215