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));
551 bool isNotNeighbor(Vector<T, 2> other)
const noexcept {
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));
725 bool isNotNeighbor(Vector<T, 2> other)
const noexcept {
726 return isOrigin(other) || isOutOfDiamond(position);
729 bool isOrigin(Vector<T, 2> other)
const noexcept {
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
constexpr T absdiff(T lhs, T rhs)
Absolute difference of two values.
Definition: Math.h:352
The namespace for gf classes.
An iterator for a 2D range.
Definition: Range.h:605
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:695
Vector< T, 2 > position
Definition: Range.h:612
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:673
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:644
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:705
const NeighborDiamondRange< T > * parent
Definition: Range.h:613
std::ptrdiff_t difference_type
Definition: Range.h:606
reference operator*() noexcept
Dereference operator.
Definition: Range.h:655
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:664
void swap(typename NeighborDiamondRange< T >::Iterator &lhs, typename NeighborDiamondRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:765
std::forward_iterator_tag iterator_category
Definition: Range.h:610
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:683
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborDiamondRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:621
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:635
A 2D range.
Definition: Range.h:595
Range< T > second
The range in the second dimension.
Definition: Range.h:597
Range< T > first
The range in the first dimension.
Definition: Range.h:596
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:754
Vector< T, 2 > origin
Definition: Range.h:598
T radius
Definition: Range.h:599
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:744
An iterator for a 2D range.
Definition: Range.h:435
Vector< T, 2 > position
Definition: Range.h:442
void swap(typename NeighborSquareRange< T >::Iterator &lhs, typename NeighborSquareRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:583
std::forward_iterator_tag iterator_category
Definition: Range.h:440
std::ptrdiff_t difference_type
Definition: Range.h:436
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:474
const NeighborSquareRange< T > * parent
Definition: Range.h:443
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:535
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:525
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:503
constexpr Iterator(Vector< T, 2 > iteratorPosition) noexcept
Constructor of a end sentinel.
Definition: Range.h:465
reference operator*() noexcept
Dereference operator.
Definition: Range.h:485
constexpr Iterator(Vector< T, 2 > iteratorPosition, const NeighborSquareRange< T > *iteratorParent) noexcept
Constructor.
Definition: Range.h:451
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:513
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:494
A 2D range.
Definition: Range.h:426
Range< T > second
The range in the second dimension.
Definition: Range.h:428
Range< T > first
The range in the first dimension.
Definition: Range.h:427
Vector< T, 2 > origin
Definition: Range.h:429
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:562
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:572
An iterator for a 2D range.
Definition: Range.h:286
Range< T > range
Definition: Range.h:293
std::ptrdiff_t difference_type
Definition: Range.h:287
std::forward_iterator_tag iterator_category
Definition: Range.h:291
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:340
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:350
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:331
reference operator*() noexcept
Dereference operator.
Definition: Range.h:322
void swap(typename PositionRange< T >::Iterator &lhs, typename PositionRange< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:414
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:311
constexpr Iterator(Range< T > iteratorRange, Vector< T, 2 > iteratorPosition) noexcept
Constructor.
Definition: Range.h:302
Vector< T, 2 > position
Definition: Range.h:294
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:372
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:362
A 2D range.
Definition: Range.h:278
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:403
Range< T > first
The range in the first dimension.
Definition: Range.h:279
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:393
Range< T > second
The range in the second dimension.
Definition: Range.h:280
A range iterator.
Definition: Range.h:52
constexpr bool operator==(const Iterator &other) const noexcept
Equality operator.
Definition: Range.h:155
value_type pointer
Definition: Range.h:55
Iterator operator--(int) noexcept
Decrement operator (postfix)
Definition: Range.h:133
constexpr bool operator!=(const Iterator &other) const noexcept
Inequality operator.
Definition: Range.h:145
std::bidirectional_iterator_tag iterator_category
Definition: Range.h:57
void swap(Iterator &other) noexcept
Swap the iterator with another iterator.
Definition: Range.h:74
Iterator operator++(int) noexcept
Increment operator (postfix)
Definition: Range.h:112
pointer operator->() noexcept
Pointer operator.
Definition: Range.h:93
Iterator & operator--() noexcept
Decrement operator (prefix)
Definition: Range.h:123
void swap(typename Range< T >::Iterator &lhs, typename Range< T >::Iterator &rhs) noexcept
Swap two range iterators.
Definition: Range.h:226
std::ptrdiff_t difference_type
Definition: Range.h:53
value_type reference
Definition: Range.h:56
Iterator & operator++() noexcept
Increment operator (prefix)
Definition: Range.h:102
reference operator*() noexcept
Dereference operator.
Definition: Range.h:84
T value_type
Definition: Range.h:54
constexpr Iterator(T iteratorIndex) noexcept
Constructor.
Definition: Range.h:66
T index
The index in the range.
Definition: Range.h:59
A half-open range of values.
Definition: Range.h:44
constexpr bool contains(T value) const noexcept
Check if a value is in a range.
Definition: Range.h:166
constexpr Iterator end() const noexcept
Get a end iterator.
Definition: Range.h:186
constexpr bool isEmpty() const noexcept
Check if the range is empty.
Definition: Range.h:205
constexpr Iterator begin() const noexcept
Get a begin iterator.
Definition: Range.h:176
T hi
The higher endpoint (excluded)
Definition: Range.h:46
constexpr bool isValid() const noexcept
Check if the range is valid.
Definition: Range.h:215
constexpr T length() const noexcept
Get the length of the range.
Definition: Range.h:195
T lo
The lower endpoint (included)
Definition: Range.h:45
A 2D vector.
Definition: Vector.h:316
T y
Second coordinate in the (x,y) representation.
Definition: Vector.h:525
T x
First coordinate in the (x,y) representation.
Definition: Vector.h:514