WPILibC++ 2023.4.3
StlIterators.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2018 Gael Guennebaud <gael.guennebaud@inria.fr>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_STLITERATORS_H
11#define EIGEN_STLITERATORS_H
12
13namespace Eigen {
14
15namespace internal {
16
17template<typename IteratorType>
19
20template<typename Derived>
22{
23protected:
25 typedef typename traits::XprType XprType;
29 // NOTE: in C++03 we cannot declare friend classes through typedefs because we need to write friend class:
31 friend class indexed_based_stl_iterator_base<typename traits::non_const_iterator>;
32public:
34 typedef std::random_access_iterator_tag iterator_category;
35
38
40 : mp_xpr(other.mp_xpr), m_index(other.m_index)
41 {}
42
44 {
45 mp_xpr = other.mp_xpr;
46 m_index = other.m_index;
47 return *this;
48 }
49
50 Derived& operator++() { ++m_index; return derived(); }
51 Derived& operator--() { --m_index; return derived(); }
52
53 Derived operator++(int) { Derived prev(derived()); operator++(); return prev;}
54 Derived operator--(int) { Derived prev(derived()); operator--(); return prev;}
55
56 friend Derived operator+(const indexed_based_stl_iterator_base& a, Index b) { Derived ret(a.derived()); ret += b; return ret; }
57 friend Derived operator-(const indexed_based_stl_iterator_base& a, Index b) { Derived ret(a.derived()); ret -= b; return ret; }
58 friend Derived operator+(Index a, const indexed_based_stl_iterator_base& b) { Derived ret(b.derived()); ret += a; return ret; }
59 friend Derived operator-(Index a, const indexed_based_stl_iterator_base& b) { Derived ret(b.derived()); ret -= a; return ret; }
60
61 Derived& operator+=(Index b) { m_index += b; return derived(); }
62 Derived& operator-=(Index b) { m_index -= b; return derived(); }
63
65 {
66 eigen_assert(mp_xpr == other.mp_xpr);
67 return m_index - other.m_index;
68 }
69
71 {
72 eigen_assert(mp_xpr == other.mp_xpr);
73 return m_index - other.m_index;
74 }
75
76 bool operator==(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
77 bool operator!=(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
78 bool operator< (const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
79 bool operator<=(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
80 bool operator> (const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
81 bool operator>=(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
82
83 bool operator==(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
84 bool operator!=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
85 bool operator< (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
86 bool operator<=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
87 bool operator> (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
88 bool operator>=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
89
90protected:
91
92 Derived& derived() { return static_cast<Derived&>(*this); }
93 const Derived& derived() const { return static_cast<const Derived&>(*this); }
94
97};
98
99template<typename Derived>
101{
102protected:
104 typedef typename traits::XprType XprType;
108 // NOTE: in C++03 we cannot declare friend classes through typedefs because we need to write friend class:
110 friend class indexed_based_stl_reverse_iterator_base<typename traits::non_const_iterator>;
111public:
113 typedef std::random_access_iterator_tag iterator_category;
114
117
119 : mp_xpr(other.mp_xpr), m_index(other.m_index)
120 {}
121
123 {
124 mp_xpr = other.mp_xpr;
125 m_index = other.m_index;
126 return *this;
127 }
128
129 Derived& operator++() { --m_index; return derived(); }
130 Derived& operator--() { ++m_index; return derived(); }
131
132 Derived operator++(int) { Derived prev(derived()); operator++(); return prev;}
133 Derived operator--(int) { Derived prev(derived()); operator--(); return prev;}
134
135 friend Derived operator+(const indexed_based_stl_reverse_iterator_base& a, Index b) { Derived ret(a.derived()); ret += b; return ret; }
136 friend Derived operator-(const indexed_based_stl_reverse_iterator_base& a, Index b) { Derived ret(a.derived()); ret -= b; return ret; }
137 friend Derived operator+(Index a, const indexed_based_stl_reverse_iterator_base& b) { Derived ret(b.derived()); ret += a; return ret; }
138 friend Derived operator-(Index a, const indexed_based_stl_reverse_iterator_base& b) { Derived ret(b.derived()); ret -= a; return ret; }
139
140 Derived& operator+=(Index b) { m_index -= b; return derived(); }
141 Derived& operator-=(Index b) { m_index += b; return derived(); }
142
144 {
145 eigen_assert(mp_xpr == other.mp_xpr);
146 return other.m_index - m_index;
147 }
148
150 {
151 eigen_assert(mp_xpr == other.mp_xpr);
152 return other.m_index - m_index;
153 }
154
155 bool operator==(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
156 bool operator!=(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
157 bool operator< (const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
158 bool operator<=(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
159 bool operator> (const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
160 bool operator>=(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
161
162 bool operator==(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
163 bool operator!=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
164 bool operator< (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
165 bool operator<=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
166 bool operator> (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
167 bool operator>=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
168
169protected:
170
171 Derived& derived() { return static_cast<Derived&>(*this); }
172 const Derived& derived() const { return static_cast<const Derived&>(*this); }
173
176};
177
178template<typename XprType>
180{
185 // NOTE: in C++03 we cannot declare friend classes through typedefs because we need to write friend class:
186 friend class pointer_based_stl_iterator<typename internal::add_const<XprType>::type>;
187 friend class pointer_based_stl_iterator<typename internal::remove_const<XprType>::type>;
188public:
190 typedef typename XprType::Scalar value_type;
191 typedef std::random_access_iterator_tag iterator_category;
192 typedef typename internal::conditional<bool(is_lvalue), value_type*, const value_type*>::type pointer;
193 typedef typename internal::conditional<bool(is_lvalue), value_type&, const value_type&>::type reference;
194
195
197 pointer_based_stl_iterator(XprType& xpr, Index index) EIGEN_NO_THROW : m_incr(xpr.innerStride())
198 {
199 m_ptr = xpr.data() + index * m_incr.value();
200 }
201
203 : m_ptr(other.m_ptr), m_incr(other.m_incr)
204 {}
205
207 {
208 m_ptr = other.m_ptr;
209 m_incr.setValue(other.m_incr);
210 return *this;
211 }
212
213 reference operator*() const { return *m_ptr; }
214 reference operator[](Index i) const { return *(m_ptr+i*m_incr.value()); }
215 pointer operator->() const { return m_ptr; }
216
219
222
227
230
232 return (m_ptr - other.m_ptr)/m_incr.value();
233 }
234
236 return (m_ptr - other.m_ptr)/m_incr.value();
237 }
238
239 bool operator==(const pointer_based_stl_iterator& other) const { return m_ptr == other.m_ptr; }
240 bool operator!=(const pointer_based_stl_iterator& other) const { return m_ptr != other.m_ptr; }
241 bool operator< (const pointer_based_stl_iterator& other) const { return m_ptr < other.m_ptr; }
242 bool operator<=(const pointer_based_stl_iterator& other) const { return m_ptr <= other.m_ptr; }
243 bool operator> (const pointer_based_stl_iterator& other) const { return m_ptr > other.m_ptr; }
244 bool operator>=(const pointer_based_stl_iterator& other) const { return m_ptr >= other.m_ptr; }
245
246 bool operator==(const other_iterator& other) const { return m_ptr == other.m_ptr; }
247 bool operator!=(const other_iterator& other) const { return m_ptr != other.m_ptr; }
248 bool operator< (const other_iterator& other) const { return m_ptr < other.m_ptr; }
249 bool operator<=(const other_iterator& other) const { return m_ptr <= other.m_ptr; }
250 bool operator> (const other_iterator& other) const { return m_ptr > other.m_ptr; }
251 bool operator>=(const other_iterator& other) const { return m_ptr >= other.m_ptr; }
252
253protected:
254
257};
258
259template<typename _XprType>
261{
262 typedef _XprType XprType;
265};
266
267template<typename XprType>
268class generic_randaccess_stl_iterator : public indexed_based_stl_iterator_base<generic_randaccess_stl_iterator<XprType> >
269{
270public:
271 typedef typename XprType::Scalar value_type;
272
273protected:
274
275 enum {
278 };
279
281 using Base::m_index;
282 using Base::mp_xpr;
283
284 // TODO currently const Transpose/Reshape expressions never returns const references,
285 // so lets return by value too.
286 //typedef typename internal::conditional<bool(has_direct_access), const value_type&, const value_type>::type read_only_ref_t;
288
289public:
290
293
297 using Base::operator=;
298
299 reference operator*() const { return (*mp_xpr)(m_index); }
300 reference operator[](Index i) const { return (*mp_xpr)(m_index+i); }
301 pointer operator->() const { return &((*mp_xpr)(m_index)); }
302};
303
304template<typename _XprType, DirectionType Direction>
306{
307 typedef _XprType XprType;
310};
311
312template<typename XprType, DirectionType Direction>
313class subvector_stl_iterator : public indexed_based_stl_iterator_base<subvector_stl_iterator<XprType,Direction> >
314{
315protected:
316
318
320 using Base::m_index;
321 using Base::mp_xpr;
322
325
326
327public:
329 typedef typename reference::PlainObject value_type;
330
331private:
332 class subvector_stl_iterator_ptr
333 {
334 public:
335 subvector_stl_iterator_ptr(const reference &subvector) : m_subvector(subvector) {}
336 reference* operator->() { return &m_subvector; }
337 private:
338 reference m_subvector;
339 };
340public:
341
342 typedef subvector_stl_iterator_ptr pointer;
343
346
347 reference operator*() const { return (*mp_xpr).template subVector<Direction>(m_index); }
348 reference operator[](Index i) const { return (*mp_xpr).template subVector<Direction>(m_index+i); }
349 pointer operator->() const { return (*mp_xpr).template subVector<Direction>(m_index); }
350};
351
352template<typename _XprType, DirectionType Direction>
354{
355 typedef _XprType XprType;
358};
359
360template<typename XprType, DirectionType Direction>
361class subvector_stl_reverse_iterator : public indexed_based_stl_reverse_iterator_base<subvector_stl_reverse_iterator<XprType,Direction> >
362{
363protected:
364
366
368 using Base::m_index;
369 using Base::mp_xpr;
370
373
374
375public:
377 typedef typename reference::PlainObject value_type;
378
379private:
380 class subvector_stl_reverse_iterator_ptr
381 {
382 public:
383 subvector_stl_reverse_iterator_ptr(const reference &subvector) : m_subvector(subvector) {}
384 reference* operator->() { return &m_subvector; }
385 private:
386 reference m_subvector;
387 };
388public:
389
390 typedef subvector_stl_reverse_iterator_ptr pointer;
391
394
395 reference operator*() const { return (*mp_xpr).template subVector<Direction>(m_index); }
396 reference operator[](Index i) const { return (*mp_xpr).template subVector<Direction>(m_index+i); }
397 pointer operator->() const { return (*mp_xpr).template subVector<Direction>(m_index); }
398};
399
400} // namespace internal
401
402
403/** returns an iterator to the first element of the 1D vector or array
404 * \only_for_vectors
405 * \sa end(), cbegin()
406 */
407template<typename Derived>
409{
411 return iterator(derived(), 0);
412}
413
414/** const version of begin() */
415template<typename Derived>
417{
418 return cbegin();
419}
420
421/** returns a read-only const_iterator to the first element of the 1D vector or array
422 * \only_for_vectors
423 * \sa cend(), begin()
424 */
425template<typename Derived>
427{
429 return const_iterator(derived(), 0);
430}
431
432/** returns an iterator to the element following the last element of the 1D vector or array
433 * \only_for_vectors
434 * \sa begin(), cend()
435 */
436template<typename Derived>
438{
440 return iterator(derived(), size());
441}
442
443/** const version of end() */
444template<typename Derived>
446{
447 return cend();
448}
449
450/** returns a read-only const_iterator to the element following the last element of the 1D vector or array
451 * \only_for_vectors
452 * \sa begin(), cend()
453 */
454template<typename Derived>
456{
458 return const_iterator(derived(), size());
459}
460
461} // namespace Eigen
462
463#endif // EIGEN_STLITERATORS_H
#define eigen_assert(x)
Definition: Macros.h:1047
#define EIGEN_NO_THROW
Definition: Macros.h:1430
#define EIGEN_STATIC_ASSERT_VECTOR_ONLY(TYPE)
Definition: StaticAssert.h:142
iterator begin()
returns an iterator to the first element of the 1D vector or array \only_for_vectors
Definition: StlIterators.h:408
iterator end()
returns an iterator to the element following the last element of the 1D vector or array \only_for_vec...
Definition: StlIterators.h:437
const_iterator cbegin() const
returns a read-only const_iterator to the first element of the 1D vector or array \only_for_vectors
Definition: StlIterators.h:426
const_iterator cend() const
returns a read-only const_iterator to the element following the last element of the 1D vector or arra...
Definition: StlIterators.h:455
generic_randaccess_stl_iterator(XprType &xpr, Index index)
Definition: StlIterators.h:295
Index m_index
Definition: StlIterators.h:96
XprType * mp_xpr
Definition: StlIterators.h:95
pointer operator->() const
Definition: StlIterators.h:301
internal::conditional< bool(is_lvalue), value_type &, read_only_ref_t >::type reference
Definition: StlIterators.h:292
generic_randaccess_stl_iterator(const typename Base::non_const_iterator &other)
Definition: StlIterators.h:296
indexed_based_stl_iterator_base< generic_randaccess_stl_iterator > Base
Definition: StlIterators.h:280
internal::conditional< bool(is_lvalue), value_type *, constvalue_type * >::type pointer
Definition: StlIterators.h:291
reference operator*() const
Definition: StlIterators.h:299
const value_type read_only_ref_t
Definition: StlIterators.h:287
XprType::Scalar value_type
Definition: StlIterators.h:271
reference operator[](Index i) const
Definition: StlIterators.h:300
generic_randaccess_stl_iterator()
Definition: StlIterators.h:294
const Derived & derived() const
Definition: StlIterators.h:93
Index difference_type
Definition: StlIterators.h:33
Derived operator--(int)
Definition: StlIterators.h:54
Index m_index
Definition: StlIterators.h:96
XprType * mp_xpr
Definition: StlIterators.h:95
Derived & operator++()
Definition: StlIterators.h:50
indexed_based_stl_iterator_base< typename traits::const_iterator > const_iterator
Definition: StlIterators.h:27
Derived & operator+=(Index b)
Definition: StlIterators.h:61
friend Derived operator+(const indexed_based_stl_iterator_base &a, Index b)
Definition: StlIterators.h:56
indexed_based_stl_iterator_base< typename traits::non_const_iterator > non_const_iterator
Definition: StlIterators.h:26
bool operator<=(const other_iterator &other) const
Definition: StlIterators.h:86
bool operator==(const indexed_based_stl_iterator_base &other) const
Definition: StlIterators.h:76
bool operator!=(const indexed_based_stl_iterator_base &other) const
Definition: StlIterators.h:77
traits::XprType XprType
Definition: StlIterators.h:25
indexed_based_stl_iterator_traits< Derived > traits
Definition: StlIterators.h:24
bool operator!=(const other_iterator &other) const
Definition: StlIterators.h:84
indexed_based_stl_iterator_base & operator=(const non_const_iterator &other)
Definition: StlIterators.h:43
bool operator>(const indexed_based_stl_iterator_base &other) const
Definition: StlIterators.h:80
bool operator<=(const indexed_based_stl_iterator_base &other) const
Definition: StlIterators.h:79
difference_type operator-(const indexed_based_stl_iterator_base &other) const
Definition: StlIterators.h:64
std::random_access_iterator_tag iterator_category
Definition: StlIterators.h:34
friend Derived operator+(Index a, const indexed_based_stl_iterator_base &b)
Definition: StlIterators.h:58
Derived operator++(int)
Definition: StlIterators.h:53
Derived & operator-=(Index b)
Definition: StlIterators.h:62
friend Derived operator-(const indexed_based_stl_iterator_base &a, Index b)
Definition: StlIterators.h:57
indexed_based_stl_iterator_base(const non_const_iterator &other) EIGEN_NO_THROW
Definition: StlIterators.h:39
bool operator==(const other_iterator &other) const
Definition: StlIterators.h:83
internal::conditional< internal::is_const< XprType >::value, non_const_iterator, const_iterator >::type other_iterator
Definition: StlIterators.h:28
bool operator>=(const indexed_based_stl_iterator_base &other) const
Definition: StlIterators.h:81
Derived & derived()
Definition: StlIterators.h:92
friend Derived operator-(Index a, const indexed_based_stl_iterator_base &b)
Definition: StlIterators.h:59
bool operator>=(const other_iterator &other) const
Definition: StlIterators.h:88
Derived & operator--()
Definition: StlIterators.h:51
indexed_based_stl_iterator_base(XprType &xpr, Index index) EIGEN_NO_THROW
Definition: StlIterators.h:37
bool operator<(const indexed_based_stl_iterator_base &other) const
Definition: StlIterators.h:78
difference_type operator-(const other_iterator &other) const
Definition: StlIterators.h:70
Derived & operator--()
Definition: StlIterators.h:130
bool operator<=(const other_iterator &other) const
Definition: StlIterators.h:165
bool operator==(const other_iterator &other) const
Definition: StlIterators.h:162
std::random_access_iterator_tag iterator_category
Definition: StlIterators.h:113
difference_type operator-(const indexed_based_stl_reverse_iterator_base &other) const
Definition: StlIterators.h:143
bool operator>=(const other_iterator &other) const
Definition: StlIterators.h:167
traits::XprType XprType
Definition: StlIterators.h:104
bool operator>(const indexed_based_stl_reverse_iterator_base &other) const
Definition: StlIterators.h:159
friend Derived operator+(const indexed_based_stl_reverse_iterator_base &a, Index b)
Definition: StlIterators.h:135
bool operator<=(const indexed_based_stl_reverse_iterator_base &other) const
Definition: StlIterators.h:158
indexed_based_stl_reverse_iterator_base(const non_const_iterator &other)
Definition: StlIterators.h:118
internal::conditional< internal::is_const< XprType >::value, non_const_iterator, const_iterator >::type other_iterator
Definition: StlIterators.h:107
Derived & operator+=(Index b)
Definition: StlIterators.h:140
difference_type operator-(const other_iterator &other) const
Definition: StlIterators.h:149
bool operator==(const indexed_based_stl_reverse_iterator_base &other) const
Definition: StlIterators.h:155
Derived operator--(int)
Definition: StlIterators.h:133
friend Derived operator-(Index a, const indexed_based_stl_reverse_iterator_base &b)
Definition: StlIterators.h:138
bool operator!=(const indexed_based_stl_reverse_iterator_base &other) const
Definition: StlIterators.h:156
indexed_based_stl_iterator_traits< Derived > traits
Definition: StlIterators.h:103
bool operator>=(const indexed_based_stl_reverse_iterator_base &other) const
Definition: StlIterators.h:160
XprType * mp_xpr
Definition: StlIterators.h:174
indexed_based_stl_reverse_iterator_base< typename traits::const_iterator > const_iterator
Definition: StlIterators.h:106
bool operator<(const indexed_based_stl_reverse_iterator_base &other) const
Definition: StlIterators.h:157
friend Derived operator+(Index a, const indexed_based_stl_reverse_iterator_base &b)
Definition: StlIterators.h:137
friend Derived operator-(const indexed_based_stl_reverse_iterator_base &a, Index b)
Definition: StlIterators.h:136
const Derived & derived() const
Definition: StlIterators.h:172
Derived & derived()
Definition: StlIterators.h:171
bool operator!=(const other_iterator &other) const
Definition: StlIterators.h:163
indexed_based_stl_reverse_iterator_base< typename traits::non_const_iterator > non_const_iterator
Definition: StlIterators.h:105
Derived & operator-=(Index b)
Definition: StlIterators.h:141
indexed_based_stl_reverse_iterator_base(XprType &xpr, Index index)
Definition: StlIterators.h:116
indexed_based_stl_reverse_iterator_base & operator=(const non_const_iterator &other)
Definition: StlIterators.h:122
Derived operator++(int)
Definition: StlIterators.h:132
Derived & operator++()
Definition: StlIterators.h:129
Index difference_type
Definition: StlIterators.h:112
Definition: StlIterators.h:180
bool operator<=(const pointer_based_stl_iterator &other) const
Definition: StlIterators.h:242
pointer_based_stl_iterator operator++(int)
Definition: StlIterators.h:220
bool operator>=(const pointer_based_stl_iterator &other) const
Definition: StlIterators.h:244
pointer m_ptr
Definition: StlIterators.h:255
bool operator==(const other_iterator &other) const
Definition: StlIterators.h:246
reference operator[](Index i) const
Definition: StlIterators.h:214
std::random_access_iterator_tag iterator_category
Definition: StlIterators.h:191
Index difference_type
Definition: StlIterators.h:189
bool operator!=(const other_iterator &other) const
Definition: StlIterators.h:247
pointer_based_stl_iterator operator--(int)
Definition: StlIterators.h:221
XprType::Scalar value_type
Definition: StlIterators.h:190
bool operator>=(const other_iterator &other) const
Definition: StlIterators.h:251
difference_type operator-(const pointer_based_stl_iterator &other) const
Definition: StlIterators.h:231
friend pointer_based_stl_iterator operator+(const pointer_based_stl_iterator &a, Index b)
Definition: StlIterators.h:223
friend pointer_based_stl_iterator operator-(const pointer_based_stl_iterator &a, Index b)
Definition: StlIterators.h:224
pointer_based_stl_iterator(const non_const_iterator &other) EIGEN_NO_THROW
Definition: StlIterators.h:202
bool operator!=(const pointer_based_stl_iterator &other) const
Definition: StlIterators.h:240
pointer_based_stl_iterator & operator++()
Definition: StlIterators.h:217
pointer_based_stl_iterator & operator--()
Definition: StlIterators.h:218
pointer_based_stl_iterator & operator+=(Index b)
Definition: StlIterators.h:228
difference_type operator-(const other_iterator &other) const
Definition: StlIterators.h:235
pointer operator->() const
Definition: StlIterators.h:215
pointer_based_stl_iterator(XprType &xpr, Index index) EIGEN_NO_THROW
Definition: StlIterators.h:197
friend pointer_based_stl_iterator operator+(Index a, const pointer_based_stl_iterator &b)
Definition: StlIterators.h:225
reference operator*() const
Definition: StlIterators.h:213
bool operator<=(const other_iterator &other) const
Definition: StlIterators.h:249
internal::variable_if_dynamic< Index, XprType::InnerStrideAtCompileTime > m_incr
Definition: StlIterators.h:256
pointer_based_stl_iterator & operator-=(Index b)
Definition: StlIterators.h:229
friend pointer_based_stl_iterator operator-(Index a, const pointer_based_stl_iterator &b)
Definition: StlIterators.h:226
bool operator==(const pointer_based_stl_iterator &other) const
Definition: StlIterators.h:239
bool operator>(const pointer_based_stl_iterator &other) const
Definition: StlIterators.h:243
bool operator<(const pointer_based_stl_iterator &other) const
Definition: StlIterators.h:241
pointer_based_stl_iterator & operator=(const non_const_iterator &other) EIGEN_NO_THROW
Definition: StlIterators.h:206
Definition: StlIterators.h:314
internal::conditional< bool(is_lvalue), SubVectorType, ConstSubVectorType >::type reference
Definition: StlIterators.h:328
Index m_index
Definition: StlIterators.h:96
subvector_stl_iterator(XprType &xpr, Index index)
Definition: StlIterators.h:345
indexed_based_stl_iterator_base< subvector_stl_iterator > Base
Definition: StlIterators.h:319
subvector_stl_iterator_ptr pointer
Definition: StlIterators.h:342
reference operator[](Index i) const
Definition: StlIterators.h:348
internal::conditional< Direction==Vertical, typenameXprType::ConstColXpr, typenameXprType::ConstRowXpr >::type ConstSubVectorType
Definition: StlIterators.h:324
pointer operator->() const
Definition: StlIterators.h:349
internal::conditional< Direction==Vertical, typenameXprType::ColXpr, typenameXprType::RowXpr >::type SubVectorType
Definition: StlIterators.h:323
reference::PlainObject value_type
Definition: StlIterators.h:329
subvector_stl_iterator()
Definition: StlIterators.h:344
reference operator*() const
Definition: StlIterators.h:347
internal::conditional< bool(is_lvalue), SubVectorType, ConstSubVectorType >::type reference
Definition: StlIterators.h:376
reference::PlainObject value_type
Definition: StlIterators.h:377
indexed_based_stl_reverse_iterator_base< subvector_stl_reverse_iterator > Base
Definition: StlIterators.h:367
subvector_stl_reverse_iterator()
Definition: StlIterators.h:392
reference operator*() const
Definition: StlIterators.h:395
internal::conditional< Direction==Vertical, typenameXprType::ConstColXpr, typenameXprType::ConstRowXpr >::type ConstSubVectorType
Definition: StlIterators.h:372
reference operator[](Index i) const
Definition: StlIterators.h:396
internal::conditional< Direction==Vertical, typenameXprType::ColXpr, typenameXprType::RowXpr >::type SubVectorType
Definition: StlIterators.h:371
subvector_stl_reverse_iterator(XprType &xpr, Index index)
Definition: StlIterators.h:393
pointer operator->() const
Definition: StlIterators.h:397
subvector_stl_reverse_iterator_ptr pointer
Definition: StlIterators.h:390
Index m_index
Definition: StlIterators.h:175
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void setValue(T v) const
Definition: XprHelper.h:139
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR T value()
Definition: XprHelper.h:135
type
Definition: core.h:575
const unsigned int DirectAccessBit
Means that the underlying array of coefficients can be directly accessed as a plain strided array.
Definition: Constants.h:155
EIGEN_CONSTEXPR Index size(const T &x)
Definition: Meta.h:479
Namespace containing all symbols from the Eigen library.
Definition: MatrixExponential.h:16
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
Definition: Eigen_Colamd.h:50
b
Definition: data.h:44
Definition: Meta.h:208
Definition: Meta.h:109
Definition: ForwardDeclarations.h:26
generic_randaccess_stl_iterator< typename internal::remove_const< XprType >::type > non_const_iterator
Definition: StlIterators.h:263
generic_randaccess_stl_iterator< typename internal::add_const< XprType >::type > const_iterator
Definition: StlIterators.h:264
subvector_stl_iterator< typename internal::remove_const< XprType >::type, Direction > non_const_iterator
Definition: StlIterators.h:308
subvector_stl_iterator< typename internal::add_const< XprType >::type, Direction > const_iterator
Definition: StlIterators.h:309
subvector_stl_reverse_iterator< typename internal::remove_const< XprType >::type, Direction > non_const_iterator
Definition: StlIterators.h:356
subvector_stl_reverse_iterator< typename internal::add_const< XprType >::type, Direction > const_iterator
Definition: StlIterators.h:357
Definition: XprHelper.h:660
Definition: ForwardDeclarations.h:17
Definition: Meta.h:96