NDDEM
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 
13 namespace Eigen {
14 
15 namespace internal {
16 
17 template<typename IteratorType>
19 
20 template<typename Derived>
22 {
23 protected:
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>;
32 public:
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 
90 protected:
91 
92  Derived& derived() { return static_cast<Derived&>(*this); }
93  const Derived& derived() const { return static_cast<const Derived&>(*this); }
94 
97 };
98 
99 template<typename Derived>
101 {
102 protected:
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>;
111 public:
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 
169 protected:
170 
171  Derived& derived() { return static_cast<Derived&>(*this); }
172  const Derived& derived() const { return static_cast<const Derived&>(*this); }
173 
176 };
177 
178 template<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>;
188 public:
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 
253 protected:
254 
257 };
258 
259 template<typename _XprType>
261 {
262  typedef _XprType XprType;
265 };
266 
267 template<typename XprType>
268 class generic_randaccess_stl_iterator : public indexed_based_stl_iterator_base<generic_randaccess_stl_iterator<XprType> >
269 {
270 public:
271  typedef typename XprType::Scalar value_type;
272 
273 protected:
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 
289 public:
290 
293 
295  generic_randaccess_stl_iterator(XprType& xpr, Index index) : Base(xpr,index) {}
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 
304 template<typename _XprType, DirectionType Direction>
306 {
307  typedef _XprType XprType;
310 };
311 
312 template<typename XprType, DirectionType Direction>
313 class subvector_stl_iterator : public indexed_based_stl_iterator_base<subvector_stl_iterator<XprType,Direction> >
314 {
315 protected:
316 
318 
320  using Base::m_index;
321  using Base::mp_xpr;
322 
325 
326 
327 public:
329  typedef typename reference::PlainObject value_type;
330 
331 private:
333  {
334  public:
335  subvector_stl_iterator_ptr(const reference &subvector) : m_subvector(subvector) {}
337  private:
339  };
340 public:
341 
343 
345  subvector_stl_iterator(XprType& xpr, Index index) : Base(xpr,index) {}
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 
352 template<typename _XprType, DirectionType Direction>
354 {
355  typedef _XprType XprType;
358 };
359 
360 template<typename XprType, DirectionType Direction>
361 class subvector_stl_reverse_iterator : public indexed_based_stl_reverse_iterator_base<subvector_stl_reverse_iterator<XprType,Direction> >
362 {
363 protected:
364 
366 
368  using Base::m_index;
369  using Base::mp_xpr;
370 
373 
374 
375 public:
377  typedef typename reference::PlainObject value_type;
378 
379 private:
381  {
382  public:
383  subvector_stl_reverse_iterator_ptr(const reference &subvector) : m_subvector(subvector) {}
385  private:
387  };
388 public:
389 
391 
393  subvector_stl_reverse_iterator(XprType& xpr, Index index) : Base(xpr,index) {}
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 
407 template<typename Derived>
409 {
411  return iterator(derived(), 0);
412 }
413 
415 template<typename Derived>
417 {
418  return cbegin();
419 }
420 
425 template<typename Derived>
427 {
429  return const_iterator(derived(), 0);
430 }
431 
436 template<typename Derived>
438 {
440  return iterator(derived(), size());
441 }
442 
444 template<typename Derived>
446 {
447  return cend();
448 }
449 
454 template<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:1037
#define EIGEN_NO_THROW
Definition: Macros.h:1420
#define EIGEN_STATIC_ASSERT_VECTOR_ONLY(TYPE)
Definition: StaticAssert.h:142
iterator begin()
Definition: StlIterators.h:408
iterator end()
Definition: StlIterators.h:437
const_iterator cbegin() const
Definition: StlIterators.h:426
const_iterator cend() const
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
internal::conditional< bool(is_lvalue), value_type &, read_only_ref_t >::type reference
Definition: StlIterators.h:292
pointer operator->() const
Definition: StlIterators.h:301
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 *, const value_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
Derived & operator++()
Definition: StlIterators.h:50
Index difference_type
Definition: StlIterators.h:33
Derived operator--(int)
Definition: StlIterators.h:54
Index m_index
Definition: StlIterators.h:96
indexed_based_stl_iterator_base & operator=(const non_const_iterator &other)
Definition: StlIterators.h:43
XprType * mp_xpr
Definition: StlIterators.h:95
indexed_based_stl_iterator_base< typename traits::const_iterator > const_iterator
Definition: StlIterators.h:27
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
Derived & operator+=(Index b)
Definition: StlIterators.h:61
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
Derived & derived()
Definition: StlIterators.h:92
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
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
Derived & operator--()
Definition: StlIterators.h:51
Derived & operator-=(Index b)
Definition: StlIterators.h:62
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
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
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
const Derived & derived() const
Definition: StlIterators.h:93
difference_type operator-(const other_iterator &other) const
Definition: StlIterators.h:70
bool operator<=(const other_iterator &other) const
Definition: StlIterators.h:165
bool operator==(const other_iterator &other) const
Definition: StlIterators.h:162
Derived & derived()
Definition: StlIterators.h:171
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
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
const Derived & derived() const
Definition: StlIterators.h:172
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
Derived & operator--()
Definition: StlIterators.h:130
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
indexed_based_stl_reverse_iterator_base & operator=(const non_const_iterator &other)
Definition: StlIterators.h:122
friend Derived operator-(const indexed_based_stl_reverse_iterator_base &a, Index b)
Definition: StlIterators.h:136
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++()
Definition: StlIterators.h:129
indexed_based_stl_reverse_iterator_base(XprType &xpr, Index index)
Definition: StlIterators.h:116
Derived & operator+=(Index b)
Definition: StlIterators.h:140
Derived operator++(int)
Definition: StlIterators.h:132
Derived & operator-=(Index b)
Definition: StlIterators.h:141
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
pointer_based_stl_iterator< typename internal::add_const< XprType >::type > const_iterator
Definition: StlIterators.h:183
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
pointer_based_stl_iterator & operator++()
Definition: StlIterators.h:217
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
difference_type operator-(const other_iterator &other) const
Definition: StlIterators.h:235
pointer_based_stl_iterator & operator-=(Index b)
Definition: StlIterators.h:229
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
pointer_based_stl_iterator & operator+=(Index b)
Definition: StlIterators.h:228
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=(const non_const_iterator &other) EIGEN_NO_THROW
Definition: StlIterators.h:206
internal::conditional< internal::is_const< XprType >::value, non_const_iterator, const_iterator >::type other_iterator
Definition: StlIterators.h:184
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
pointer_based_stl_iterator & operator--()
Definition: StlIterators.h:218
pointer_based_stl_iterator< typename internal::remove_const< XprType >::type > non_const_iterator
Definition: StlIterators.h:182
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
subvector_stl_iterator_ptr(const reference &subvector)
Definition: StlIterators.h:335
reference * operator->()
Definition: StlIterators.h:336
Definition: StlIterators.h:314
Index m_index
Definition: StlIterators.h:96
internal::conditional< Direction==Vertical, typename XprType::ColXpr, typename XprType::RowXpr >::type SubVectorType
Definition: StlIterators.h:323
internal::conditional< bool(is_lvalue), SubVectorType, ConstSubVectorType >::type reference
Definition: StlIterators.h:328
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, typename XprType::ConstColXpr, typename XprType::ConstRowXpr >::type ConstSubVectorType
Definition: StlIterators.h:324
pointer operator->() const
Definition: StlIterators.h:349
reference::PlainObject value_type
Definition: StlIterators.h:329
subvector_stl_iterator()
Definition: StlIterators.h:344
reference operator*() const
Definition: StlIterators.h:347
subvector_stl_reverse_iterator_ptr(const reference &subvector)
Definition: StlIterators.h:383
reference::PlainObject value_type
Definition: StlIterators.h:377
indexed_based_stl_reverse_iterator_base< subvector_stl_reverse_iterator > Base
Definition: StlIterators.h:367
internal::conditional< Direction==Vertical, typename XprType::ConstColXpr, typename XprType::ConstRowXpr >::type ConstSubVectorType
Definition: StlIterators.h:372
subvector_stl_reverse_iterator()
Definition: StlIterators.h:392
reference operator*() const
Definition: StlIterators.h:395
internal::conditional< Direction==Vertical, typename XprType::ColXpr, typename XprType::RowXpr >::type SubVectorType
Definition: StlIterators.h:371
reference operator[](Index i) const
Definition: StlIterators.h:396
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
internal::conditional< bool(is_lvalue), SubVectorType, ConstSubVectorType >::type reference
Definition: StlIterators.h:376
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
const unsigned int DirectAccessBit
Definition: Constants.h:155
EIGEN_CONSTEXPR Index size(const T &x)
Definition: Meta.h:479
Namespace containing all symbols from the Eigen library.
Definition: LDLT.h:16
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
type
The type the bitset is encoded with.
Definition: bitset.hpp:44
Definition: document.h:416
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
Definition: pointer.h:1181
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