6 #ifndef DP3_BASE_CURSOR_H_
7 #define DP3_BASE_CURSOR_H_
22 cursor() : itsPointer(0), itsRank(0) {}
24 cursor(T *pointer) : itsPointer(pointer), itsRank(1) {
25 std::fill(itsStrides, itsStrides + MAX_RANK, 0);
29 template <
typename T_STRIDE>
31 : itsPointer(pointer), itsRank(
rank) {
32 assert(
rank <= MAX_RANK);
33 std::copy(strides, strides + itsRank, itsStrides);
34 std::fill(itsStrides + itsRank, itsStrides + MAX_RANK, 0);
37 size_t rank()
const {
return itsRank; }
40 itsPointer += itsStrides[0];
46 itsPointer += itsStrides[0];
51 itsPointer += n * itsStrides[0];
56 itsPointer -= n * itsStrides[0];
68 T &
operator[](
size_t n) {
return *(itsPointer + n * itsStrides[0]); }
71 return *(itsPointer + n * itsStrides[0]);
74 void forward(
size_t i) { itsPointer += itsStrides[i]; }
76 void forward(
size_t i,
size_t n) { itsPointer += n * itsStrides[i]; }
78 void backward(
size_t i) { itsPointer -= itsStrides[i]; }
80 void backward(
size_t i,
size_t n) { itsPointer -= n * itsStrides[i]; }
84 const T *
address()
const {
return itsPointer; }
86 size_t stride(
size_t i)
const {
return itsStrides[i]; }
89 static const size_t MAX_RANK = 5;
93 size_t itsStrides[MAX_RANK] = {0};
102 std::fill(itsStrides, itsStrides + MAX_RANK, 0);
106 template <
typename T_STRIDE>
108 : itsPointer(pointer), itsRank(
rank) {
109 std::copy(strides, strides + itsRank, itsStrides);
110 std::fill(itsStrides + itsRank, itsStrides + MAX_RANK, 0);
114 : itsPointer(other.
address()), itsRank(other.
rank()) {
115 for (
size_t i = 0; i < itsRank; ++i) {
116 itsStrides[i] = other.
stride(i);
118 std::fill(itsStrides + itsRank, itsStrides + MAX_RANK, 0);
121 size_t rank()
const {
return itsRank; }
124 itsPointer += itsStrides[0];
130 itsPointer += itsStrides[0];
135 itsPointer += n * itsStrides[0];
140 itsPointer -= n * itsStrides[0];
149 return *(itsPointer + n * itsStrides[0]);
152 void forward(
size_t i) { itsPointer += itsStrides[i]; }
154 void forward(
size_t i,
size_t n) { itsPointer += n * itsStrides[i]; }
156 void backward(
size_t i) { itsPointer -= itsStrides[i]; }
158 void backward(
size_t i,
size_t n) { itsPointer -= n * itsStrides[i]; }
160 const T *
address()
const {
return itsPointer; }
162 size_t stride(
size_t i)
const {
return itsStrides[i]; }
165 static const size_t MAX_RANK = 5;
169 size_t itsStrides[MAX_RANK] = {0};
const_cursor(const T *pointer)
Definition: Cursor.h:101
void backward(size_t i, size_t n)
Definition: Cursor.h:158
size_t stride(size_t i) const
Definition: Cursor.h:162
void forward(size_t i)
Definition: Cursor.h:152
const_cursor operator++(int)
Definition: Cursor.h:128
const T & operator*() const
Definition: Cursor.h:144
const_cursor(const T *pointer, size_t rank, const T_STRIDE *strides)
Definition: Cursor.h:107
const T & operator[](size_t n) const
Definition: Cursor.h:148
const T * address() const
Definition: Cursor.h:160
const_cursor & operator++()
Definition: Cursor.h:123
void forward(size_t i, size_t n)
Definition: Cursor.h:154
void backward(size_t i)
Definition: Cursor.h:156
const T * operator->() const
Definition: Cursor.h:146
const_cursor()
Definition: Cursor.h:99
const_cursor(const cursor< T > &other)
Definition: Cursor.h:113
const_cursor & operator-=(size_t n)
Definition: Cursor.h:139
const_cursor & operator+=(size_t n)
Definition: Cursor.h:134
size_t rank() const
Definition: Cursor.h:121
Multi-dimensional iterators.
Definition: Cursor.h:20
T * operator->()
Definition: Cursor.h:64
cursor & operator+=(size_t n)
Definition: Cursor.h:50
cursor()
Definition: Cursor.h:22
cursor(T *pointer, size_t rank, const T_STRIDE *strides)
Definition: Cursor.h:30
const T * operator->() const
Definition: Cursor.h:66
T & operator*()
Definition: Cursor.h:60
size_t stride(size_t i) const
Definition: Cursor.h:86
cursor & operator-=(size_t n)
Definition: Cursor.h:55
cursor(T *pointer)
Definition: Cursor.h:24
void forward(size_t i)
Definition: Cursor.h:74
const T & operator[](size_t n) const
Definition: Cursor.h:70
T & operator[](size_t n)
Definition: Cursor.h:68
size_t rank() const
Definition: Cursor.h:37
void backward(size_t i, size_t n)
Definition: Cursor.h:80
void forward(size_t i, size_t n)
Definition: Cursor.h:76
const T & operator*() const
Definition: Cursor.h:62
void backward(size_t i)
Definition: Cursor.h:78
cursor operator++(int)
Definition: Cursor.h:44
const T * address() const
Definition: Cursor.h:84
T * address()
Definition: Cursor.h:82
cursor & operator++()
Definition: Cursor.h:39
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53