NumCpp  2.1.0
A C++ implementation of the Python Numpy library
NdArrayIterators.hpp
Go to the documentation of this file.
1 #pragma once
30 
31 #include "NumCpp/Core/Types.hpp"
32 
33 #include <iterator>
34 
35 namespace nc
36 {
37  //================================================================================
38  // Class Description:
40  template<typename dtype,
41  typename PointerType,
42  typename DifferenceType>
44  {
45  private:
47 
48  public:
49  using iterator_category = std::random_access_iterator_tag;
50  using value_type = dtype;
51  using pointer = PointerType;
52  using reference = const value_type&;
53  using difference_type = DifferenceType;
54 
55  //============================================================================
56  // Method Description:
59  NdArrayConstIterator() = default;
60 
61  //============================================================================
62  // Method Description:
67  explicit NdArrayConstIterator(pointer ptr) noexcept :
68  ptr_(ptr)
69  {}
70 
71  //============================================================================
72  // Method Description:
77  reference operator*() const noexcept
78  {
79  return *ptr_;
80  }
81 
82  //============================================================================
83  // Method Description:
88  pointer operator->() const noexcept
89  {
90  return ptr_;
91  }
92 
93  //============================================================================
94  // Method Description:
99  self_type& operator++() noexcept
100  {
101  ++ptr_;
102  return *this;
103  }
104 
105  //============================================================================
106  // Method Description:
111  self_type operator++(int) noexcept
112  {
113  self_type tmp = *this;
114  ++*this;
115  return tmp;
116  }
117 
118  //============================================================================
119  // Method Description:
124  self_type& operator--() noexcept
125  {
126  --ptr_;
127  return *this;
128  }
129 
130  //============================================================================
131  // Method Description:
136  self_type operator--(int) noexcept
137  {
138  self_type tmp = *this;
139  --*this;
140  return tmp;
141  }
142 
143  //============================================================================
144  // Method Description:
150  self_type& operator+=(const difference_type offset) noexcept
151  {
152  ptr_ += offset;
153  return *this;
154  }
155 
156  //============================================================================
157  // Method Description:
163  self_type operator+(const difference_type offset) const noexcept
164  {
165  self_type tmp = *this;
166  return tmp += offset;
167  }
168 
169  //============================================================================
170  // Method Description:
176  self_type& operator-=(const difference_type offset) noexcept
177  {
178  return *this += -offset;
179  }
180 
181  //============================================================================
182  // Method Description:
188  self_type operator-(const difference_type offset) const noexcept
189  {
190  self_type tmp = *this;
191  return tmp -= offset;
192  }
193 
194  //============================================================================
195  // Method Description:
201  difference_type operator-(const self_type& rhs) const noexcept
202  {
203  return ptr_ - rhs.ptr_;
204  }
205 
206  //============================================================================
207  // Method Description:
213  reference operator[](const difference_type offset) const noexcept
214  {
215  return *(*this + offset);
216  }
217 
218  //============================================================================
219  // Method Description:
225  bool operator==(const self_type& rhs) const noexcept
226  {
227  return ptr_ == rhs.ptr_;
228  }
229 
230  //============================================================================
231  // Method Description:
237  bool operator!=(const self_type& rhs) const noexcept
238  {
239  return !(*this == rhs);
240  }
241 
242  //============================================================================
243  // Method Description:
249  bool operator<(const self_type& rhs) const noexcept
250  {
251  return ptr_ < rhs.ptr_;
252  }
253 
254  //============================================================================
255  // Method Description:
261  bool operator>(const self_type& rhs) const noexcept
262  {
263  return rhs < *this;
264  }
265 
266  //============================================================================
267  // Method Description:
273  bool operator<=(const self_type& rhs) const noexcept
274  {
275  return !(rhs < *this);
276  }
277 
278  //============================================================================
279  // Method Description:
285  bool operator>=(const self_type& rhs) const noexcept
286  {
287  return !(*this < rhs);
288  }
289 
290  private:
291  pointer ptr_{};
292  };
293 
294  //============================================================================
295  // Method Description:
302  template <class dtype,
303  typename PointerType,
304  typename DifferenceType>
308  {
309  return next += offset;
310  }
311 
312  //================================================================================
313  // Class Description:
315  template<typename dtype,
316  typename PointerType,
317  typename DifferenceType>
318  class NdArrayIterator : public NdArrayConstIterator<dtype, PointerType, DifferenceType>
319  {
320  private:
323 
324  public:
325  using iterator_category = std::random_access_iterator_tag;
326  using value_type = dtype;
327  using pointer = PointerType;
329  using difference_type = DifferenceType;
330 
331  using MyBase::MyBase;
332 
333  //============================================================================
334  // Method Description:
339  reference operator*() const noexcept
340  {
341  return const_cast<reference>(MyBase::operator*());
342  }
343 
344  //============================================================================
345  // Method Description:
350  pointer operator->() const noexcept
351  {
352  return const_cast<pointer>(MyBase::operator->());
353  }
354 
355  //============================================================================
356  // Method Description:
361  self_type& operator++() noexcept
362  {
364  return *this;
365  }
366 
367  //============================================================================
368  // Method Description:
373  self_type operator++(int) noexcept
374  {
375  self_type tmp = *this;
377  return tmp;
378  }
379 
380  //============================================================================
381  // Method Description:
386  self_type& operator--() noexcept
387  {
389  return *this;
390  }
391 
392  //============================================================================
393  // Method Description:
398  self_type operator--(int) noexcept
399  {
400  self_type tmp = *this;
402  return tmp;
403  }
404 
405  //============================================================================
406  // Method Description:
412  self_type& operator+=(const difference_type offset) noexcept
413  {
414  MyBase::operator+=(offset);
415  return *this;
416  }
417 
418  //============================================================================
419  // Method Description:
425  self_type operator+(const difference_type offset) const noexcept
426  {
427  self_type tmp = *this;
428  return tmp += offset;
429  }
430 
431  //============================================================================
432  // Method Description:
438  self_type& operator-=(const difference_type offset) noexcept
439  {
440  MyBase::operator-=(offset);
441  return *this;
442  }
443 
444  using MyBase::operator-;
445 
446  //============================================================================
447  // Method Description:
453  self_type operator-(const difference_type offset) const noexcept
454  {
455  self_type tmp = *this;
456  return tmp -= offset;
457  }
458 
459  //============================================================================
460  // Method Description:
466  reference operator[](const difference_type offset) const noexcept
467  {
468  return const_cast<reference>(MyBase::operator[](offset));
469  }
470  };
471 
472  //============================================================================
473  // Method Description:
480  template <class dtype,
481  typename PointerType,
482  typename DifferenceType>
486  {
487  return next += offset;
488  }
489 
490  //================================================================================
491  // Class Description:
493  template<typename dtype,
494  typename SizeType,
495  typename PointerType,
496  typename DifferenceType>
498  {
499  private:
501 
502  public:
503  using iterator_category = std::random_access_iterator_tag;
504  using value_type = dtype;
505  using size_type = SizeType;
506  using pointer = PointerType;
507  using reference = const value_type&;
508  using difference_type = DifferenceType;
509 
510  //============================================================================
511  // Method Description:
514  NdArrayConstColumnIterator() = default;
515 
516  //============================================================================
517  // Method Description:
524  NdArrayConstColumnIterator(pointer ptr, SizeType numRows, SizeType numCols) noexcept :
525  ptr_(ptr),
526  currPtr_(ptr),
527  numRows_(static_cast<difference_type>(numRows)),
528  numCols_(static_cast<difference_type>(numCols)),
529  size_(numRows_ * numCols_)
530  {}
531 
532  //============================================================================
533  // Method Description:
538  reference operator*() const noexcept
539  {
540  return *currPtr_;
541  }
542 
543  //============================================================================
544  // Method Description:
549  pointer operator->() const noexcept
550  {
551  return currPtr_;
552  }
553 
554  //============================================================================
555  // Method Description:
560  self_type& operator++() noexcept
561  {
562  return *this += 1;
563  }
564 
565  //============================================================================
566  // Method Description:
571  self_type operator++(int) noexcept
572  {
573  self_type tmp = *this;
574  ++*this;
575  return tmp;
576  }
577 
578  //============================================================================
579  // Method Description:
584  self_type& operator--() noexcept
585  {
586  return *this -= 1;
587  }
588 
589  //============================================================================
590  // Method Description:
595  self_type operator--(int) noexcept
596  {
597  self_type tmp = *this;
598  --*this;
599  return tmp;
600  }
601 
602  //============================================================================
603  // Method Description:
609  self_type& operator+=(const difference_type offset) noexcept
610  {
611  currPtr_ = colIdx2Ptr(ptr2ColIdx(currPtr_) + offset);
612  return *this;
613  }
614 
615  //============================================================================
616  // Method Description:
622  self_type operator+(const difference_type offset) const noexcept
623  {
624  self_type tmp = *this;
625  return tmp += offset;
626  }
627 
628  //============================================================================
629  // Method Description:
635  self_type& operator-=(const difference_type offset) noexcept
636  {
637  return *this += -offset;
638  }
639 
640  //============================================================================
641  // Method Description:
647  self_type operator-(const difference_type offset) const noexcept
648  {
649  self_type tmp = *this;
650  return tmp -= offset;
651  }
652 
653  //============================================================================
654  // Method Description:
660  difference_type operator-(const self_type& rhs) const noexcept
661  {
662  return ptr2ColIdx(currPtr_) - ptr2ColIdx(rhs.currPtr_);
663  }
664 
665  //============================================================================
666  // Method Description:
672  reference operator[](const difference_type offset) const noexcept
673  {
674  return *(*this + offset);
675  }
676 
677  //============================================================================
678  // Method Description:
684  bool operator==(const self_type& rhs) const noexcept
685  {
686  return currPtr_ == rhs.currPtr_;
687  }
688 
689  //============================================================================
690  // Method Description:
696  bool operator!=(const self_type& rhs) const noexcept
697  {
698  return !(*this == rhs);
699  }
700 
701  //============================================================================
702  // Method Description:
708  bool operator<(const self_type& rhs) const noexcept
709  {
710  return *this - rhs < 0;
711  }
712 
713  //============================================================================
714  // Method Description:
720  bool operator>(const self_type& rhs) const noexcept
721  {
722  return *this - rhs > 0;
723  }
724 
725  //============================================================================
726  // Method Description:
732  bool operator<=(const self_type& rhs) const noexcept
733  {
734  return !(rhs < *this);
735  }
736 
737  //============================================================================
738  // Method Description:
744  bool operator>=(const self_type& rhs) const noexcept
745  {
746  return !(*this < rhs);
747  }
748 
749  private:
750  pointer ptr_{};
751  pointer currPtr_{};
752  difference_type numRows_{ 0 };
753  difference_type numCols_{ 0 };
754  difference_type size_{ 0 };
755 
756  //============================================================================
757  // Method Description:
763  difference_type ptr2ColIdx(pointer ptr) const noexcept
764  {
765  if (ptr == nullptr)
766  {
767  return size_;
768  }
769 
770  const auto rowIdx = ptr - ptr_;
771  if (rowIdx >= size_)
772  {
773  return size_;
774  }
775 
776  const auto row = rowIdx / numCols_;
777  const auto col = rowIdx % numCols_;
778  return row + col * numRows_;
779  }
780 
781  //============================================================================
782  // Method Description:
788  pointer colIdx2Ptr(difference_type colIdx) const noexcept
789  {
790  if (colIdx >= size_)
791  {
792  return nullptr;
793  }
794 
795  const auto row = colIdx % numRows_;
796  const auto col = colIdx / numRows_;
797  const auto rowIdx = col + row * numCols_;
798  return ptr_ + rowIdx;
799  }
800  };
801 
802  //============================================================================
803  // Method Description:
810  template <class dtype,
811  typename SizeType,
812  typename PointerType,
813  typename DifferenceType>
817  {
818  return next += offset;
819  }
820 
821  //================================================================================
822  // Class Description:
824  template<typename dtype,
825  typename SizeType,
826  typename PointerType,
827  typename DifferenceType>
828  class NdArrayColumnIterator : public NdArrayConstColumnIterator<dtype, SizeType, PointerType, DifferenceType>
829  {
830  private:
833 
834  public:
835  using iterator_category = std::random_access_iterator_tag;
836  using value_type = dtype;
837  using size_type = SizeType;
838  using pointer = PointerType;
840  using difference_type = DifferenceType;
841 
842  using MyBase::MyBase;
843 
844  //============================================================================
845  // Method Description:
850  reference operator*() const noexcept
851  {
852  return const_cast<reference>(MyBase::operator*());
853  }
854 
855  //============================================================================
856  // Method Description:
861  pointer operator->() const noexcept
862  {
863  return const_cast<pointer>(MyBase::operator->());
864  }
865 
866  //============================================================================
867  // Method Description:
872  self_type& operator++() noexcept
873  {
875  return *this;
876  }
877 
878  //============================================================================
879  // Method Description:
884  self_type operator++(int) noexcept
885  {
886  self_type tmp = *this;
888  return tmp;
889  }
890 
891  //============================================================================
892  // Method Description:
897  self_type& operator--() noexcept
898  {
900  return *this;
901  }
902 
903  //============================================================================
904  // Method Description:
909  self_type operator--(int) noexcept
910  {
911  self_type tmp = *this;
913  return tmp;
914  }
915 
916  //============================================================================
917  // Method Description:
923  self_type& operator+=(const difference_type offset) noexcept
924  {
925  MyBase::operator+=(offset);
926  return *this;
927  }
928 
929  //============================================================================
930  // Method Description:
936  self_type operator+(const difference_type offset) const noexcept
937  {
938  self_type tmp = *this;
939  return tmp += offset;
940  }
941 
942  //============================================================================
943  // Method Description:
949  self_type& operator-=(const difference_type offset) noexcept
950  {
951  MyBase::operator-=(offset);
952  return *this;
953  }
954 
955  using MyBase::operator-;
956 
957  //============================================================================
958  // Method Description:
964  self_type operator-(const difference_type offset) const noexcept
965  {
966  self_type tmp = *this;
967  return tmp -= offset;
968  }
969 
970  //============================================================================
971  // Method Description:
977  reference operator[](const difference_type offset) const noexcept
978  {
979  return const_cast<reference>(MyBase::operator[](offset));
980  }
981  };
982 
983  //============================================================================
984  // Method Description:
991  template <class dtype,
992  typename SizeType,
993  typename PointerType,
994  typename DifferenceType>
998  {
999  return next += offset;
1000  }
1001 } // namespace nc
nc::NdArrayIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:425
nc::NdArrayColumnIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:840
nc::NdArrayColumnIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:897
nc::NdArrayConstIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:124
nc::NdArrayConstColumnIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:635
nc::NdArrayConstColumnIterator::operator<=
bool operator<=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:732
nc::NdArrayIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:438
nc::NdArrayIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:329
nc::NdArrayColumnIterator
Custom column iterator for NdArray.
Definition: NdArrayIterators.hpp:828
nc::operator+
NdArrayConstIterator< dtype, PointerType, DifferenceType > operator+(typename NdArrayConstIterator< dtype, PointerType, DifferenceType >::difference_type offset, NdArrayConstIterator< dtype, PointerType, DifferenceType > next) noexcept
Definition: NdArrayIterators.hpp:305
nc::NdArrayIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:466
nc::NdArrayColumnIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:977
nc::NdArrayColumnIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:850
nc::NdArrayConstColumnIterator::NdArrayConstColumnIterator
NdArrayConstColumnIterator()=default
nc::NdArrayColumnIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:936
nc::NdArrayIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:398
nc::NdArrayColumnIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:923
nc::NdArrayConstColumnIterator::size_type
SizeType size_type
Definition: NdArrayIterators.hpp:505
nc::NdArrayConstColumnIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:508
nc::NdArrayConstIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:136
nc::NdArrayConstIterator::operator<
bool operator<(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:249
nc::NdArrayColumnIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:872
nc::NdArrayConstIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:188
nc::NdArrayConstIterator::NdArrayConstIterator
NdArrayConstIterator()=default
nc::NdArrayConstIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:163
nc::NdArrayConstIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:77
nc::NdArrayConstIterator::iterator_category
std::random_access_iterator_tag iterator_category
Definition: NdArrayIterators.hpp:49
nc::NdArrayConstColumnIterator::operator>=
bool operator>=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:744
nc::NdArrayConstColumnIterator::pointer
PointerType pointer
Definition: NdArrayIterators.hpp:506
nc::NdArrayIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:361
nc::NdArrayConstColumnIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:584
nc::NdArrayConstColumnIterator
Custom column const_iterator for NdArray.
Definition: NdArrayIterators.hpp:497
nc::NdArrayConstIterator::operator>
bool operator>(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:261
nc::NdArrayConstColumnIterator::iterator_category
std::random_access_iterator_tag iterator_category
Definition: NdArrayIterators.hpp:503
nc::NdArrayConstColumnIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:538
nc::NdArrayConstColumnIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:571
nc::NdArrayConstIterator::reference
const value_type & reference
Definition: NdArrayIterators.hpp:52
nc::NdArrayConstIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:99
nc::NdArrayConstColumnIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:647
nc::NdArrayConstIterator::value_type
dtype value_type
Definition: NdArrayIterators.hpp:50
nc::NdArrayConstColumnIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:560
nc::NdArrayConstColumnIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:609
nc::NdArrayConstIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:88
nc::NdArrayIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:373
nc::NdArrayConstIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:111
nc::NdArrayConstColumnIterator::operator!=
bool operator!=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:696
nc::NdArrayConstColumnIterator::operator<
bool operator<(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:708
nc
Definition: Coordinate.hpp:45
nc::NdArrayConstColumnIterator::value_type
dtype value_type
Definition: NdArrayIterators.hpp:504
nc::NdArrayConstColumnIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:549
nc::NdArrayConstIterator
Custom const_iterator for NdArray.
Definition: NdArrayIterators.hpp:43
nc::NdArrayColumnIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:964
nc::NdArrayConstIterator::operator<=
bool operator<=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:273
nc::NdArrayIterator
Custom iterator for NdArray.
Definition: NdArrayIterators.hpp:318
nc::NdArrayConstColumnIterator::NdArrayConstColumnIterator
NdArrayConstColumnIterator(pointer ptr, SizeType numRows, SizeType numCols) noexcept
Definition: NdArrayIterators.hpp:524
nc::NdArrayConstIterator::operator!=
bool operator!=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:237
nc::NdArrayConstColumnIterator::operator==
bool operator==(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:684
nc::NdArrayIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:412
nc::NdArrayConstIterator::operator-
difference_type operator-(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:201
nc::NdArrayConstColumnIterator::operator-
difference_type operator-(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:660
nc::NdArrayColumnIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:861
nc::NdArrayConstIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:150
nc::NdArrayIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:386
nc::NdArrayIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:339
nc::NdArrayConstColumnIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:595
nc::NdArrayConstIterator::NdArrayConstIterator
NdArrayConstIterator(pointer ptr) noexcept
Definition: NdArrayIterators.hpp:67
nc::NdArrayConstColumnIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:672
nc::NdArrayIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:453
Types.hpp
nc::NdArrayConstColumnIterator::reference
const value_type & reference
Definition: NdArrayIterators.hpp:507
nc::NdArrayConstIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:176
nc::NdArrayConstIterator::pointer
PointerType pointer
Definition: NdArrayIterators.hpp:51
nc::NdArrayConstColumnIterator::operator>
bool operator>(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:720
nc::NdArrayIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:350
nc::NdArrayColumnIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:884
nc::NdArrayConstIterator::operator==
bool operator==(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:225
nc::NdArrayColumnIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:909
nc::NdArrayConstColumnIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:622
nc::NdArrayConstIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:53
nc::NdArrayConstIterator::operator>=
bool operator>=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:285
nc::NdArrayConstIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:213
nc::NdArrayColumnIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:949