2 #ifndef OPENGM_ACCESSOR_ITERATOR
3 #define OPENGM_ACCESSOR_ITERATOR
61 template<
class A,
bool isConst = false>
62 class AccessorIterator {
65 typedef typename Accessor::value_type value_type;
66 typedef typename meta::If<isConst, const value_type*, value_type*>::type pointer;
67 typedef typename meta::If
72 meta::IsFundamental<value_type>::value,
78 typedef size_t difference_type;
79 typedef std::random_access_iterator_tag iterator_category;
81 AccessorIterator(
const Accessor& = Accessor(),
const size_t = 0);
83 template<
bool isConstLocal>
84 bool operator==(
const AccessorIterator<A, isConstLocal>&)
const;
85 template<
bool isConstLocal>
86 bool operator!=(
const AccessorIterator<A, isConstLocal>&)
const;
87 template<
bool isConstLocal>
88 bool operator<=(const AccessorIterator<A, isConstLocal>&)
const;
89 template<
bool isConstLocal>
90 bool operator>=(
const AccessorIterator<A, isConstLocal>&)
const;
91 template<
bool isConstLocal>
92 bool operator<(const AccessorIterator<A, isConstLocal>&)
const;
93 template<
bool isConstLocal>
94 bool operator>(
const AccessorIterator<A, isConstLocal>&)
const;
97 const value_type* operator->()
const;
100 reference operator[](
const size_t);
101 const value_type& operator[](
const size_t)
const;
107 AccessorIterator<A, isConst>
operator+=(
const size_t);
108 AccessorIterator<A, isConst>
operator-=(
const size_t);
110 AccessorIterator<A, isConst>
operator+(
const size_t)
const;
111 AccessorIterator<A, isConst>
operator-(
const size_t)
const;
112 template<
bool isConstLocal>
113 size_t operator-(
const AccessorIterator<A, isConstLocal>&)
const;
116 void testInvariant()
const;
123 template<
class A,
bool isConst>
124 AccessorIterator<A, isConst>
operator+(
const size_t,
const AccessorIterator<A, isConst>&);
128 template<
class A,
bool isConst>
130 AccessorIterator<A, isConst>::AccessorIterator
132 const typename AccessorIterator<A, isConst>::Accessor& accessor,
135 : accessor_(accessor),
139 template<
class A,
bool isConst>
140 template<
bool isConstLocal>
142 AccessorIterator<A, isConst>::operator==
144 const AccessorIterator<A, isConstLocal>& it
148 return it.index_ == index_;
151 template<
class A,
bool isConst>
152 template<
bool isConstLocal>
154 AccessorIterator<A, isConst>::operator!=
156 const AccessorIterator<A, isConstLocal>& it
160 return it.index_ != index_;
163 template<
class A,
bool isConst>
164 template<
bool isConstLocal>
166 AccessorIterator<A, isConst>::operator<=
168 const AccessorIterator<A, isConstLocal>& it
172 return index_ <= it.index_;
175 template<
class A,
bool isConst>
176 template<
bool isConstLocal>
178 AccessorIterator<A, isConst>::operator>=
180 const AccessorIterator<A, isConstLocal>& it
184 return index_ >= it.index_;
187 template<
class A,
bool isConst>
188 template<
bool isConstLocal>
190 AccessorIterator<A, isConst>::operator<
192 const AccessorIterator<A, isConstLocal>& it
196 return index_ < it.index_;
199 template<
class A,
bool isConst>
200 template<
bool isConstLocal>
202 AccessorIterator<A, isConst>::operator>
204 const AccessorIterator<A, isConstLocal>& it
208 return index_ > it.index_;
211 template<
class A,
bool isConst>
212 inline typename AccessorIterator<A, isConst>::pointer
213 AccessorIterator<A, isConst>::operator->()
216 return &accessor_[index_];
219 template<
class A,
bool isConst>
220 inline const typename AccessorIterator<A, isConst>::value_type*
221 AccessorIterator<A, isConst>::operator->()
const
224 return &accessor_[index_];
227 template<
class A,
bool isConst>
228 inline const typename AccessorIterator<A, isConst>::value_type&
232 return accessor_[index_];
235 template<
class A,
bool isConst>
236 inline typename AccessorIterator<A, isConst>::reference
240 return accessor_[index_];
243 template<
class A,
bool isConst>
244 inline const typename AccessorIterator<A, isConst>::value_type&
245 AccessorIterator<A, isConst>::operator[]
251 return accessor_[index_ + j];
254 template<
class A,
bool isConst>
255 inline typename AccessorIterator<A, isConst>::reference
256 AccessorIterator<A, isConst>::operator[]
262 return accessor_[index_ + j];
265 template<
class A,
bool isConst>
266 inline AccessorIterator<A, isConst>&
269 if(index_ < accessor_.size()) {
276 template<
class A,
bool isConst>
277 inline AccessorIterator<A, isConst>
280 if(index_ < accessor_.size()) {
281 AccessorIterator it = *
this;
291 template<
class A,
bool isConst>
292 inline AccessorIterator<A, isConst>&
301 template<
class A,
bool isConst>
302 inline AccessorIterator<A, isConst>
306 AccessorIterator it = *
this;
312 template<
class A,
bool isConst>
313 inline AccessorIterator<A, isConst>
314 AccessorIterator<A, isConst>::operator+=
319 if(index_ + j <= accessor_.size()) {
323 index_ = accessor_.size();
329 template<
class A,
bool isConst>
330 inline AccessorIterator<A, isConst>
331 AccessorIterator<A, isConst>::operator-=
342 template<
class A,
bool isConst>
344 AccessorIterator<A, isConst>::testInvariant()
const
349 template<
class A,
bool isConst>
350 inline AccessorIterator<A, isConst>
351 AccessorIterator<A, isConst>::operator+
356 AccessorIterator<A, isConst> it = *
this;
361 template<
class A,
bool isConst>
362 inline AccessorIterator<A, isConst>
363 AccessorIterator<A, isConst>::operator-
368 AccessorIterator<A, isConst> it = *
this;
373 template<
class A,
bool isConst>
374 template<
bool isConstLocal>
376 AccessorIterator<A, isConst>::operator-
378 const AccessorIterator<A, isConstLocal>& it
381 typedef std::ptrdiff_t difference_type;
383 return static_cast<difference_type
>(index_) - static_cast<difference_type>(it.index_);
388 template<
class A,
bool isConst>
389 inline AccessorIterator<A, isConst>
393 const AccessorIterator<A, isConst>& it
403 #endif // #ifndef OPENGM_ACCESSOR_ITERATOR
bool operator>=(const IndicatorVariable< INDEX1_TYPE, LABEL1_TYPE > &indicatorVar1, const IndicatorVariable< INDEX2_TYPE, LABEL2_TYPE > &indicatorVar2)
IndependentFactor< T, I, L > & operator-=(IndependentFactor< T, I, L > &op1, const T &op2)
IndependentFactor< T, I, L > operator*(const IndependentFactor< T, I, L > &op1, const IndependentFactor< T, I, L > &op2)
bool operator!=(const IndicatorVariable< INDEX1_TYPE, LABEL1_TYPE > &indicatorVar1, const IndicatorVariable< INDEX2_TYPE, LABEL2_TYPE > &indicatorVar2)
bool operator==(const IndicatorVariable< INDEX1_TYPE, LABEL1_TYPE > &indicatorVar1, const IndicatorVariable< INDEX2_TYPE, LABEL2_TYPE > &indicatorVar2)
#define OPENGM_ASSERT(expression)
IndependentFactor< T, I, L > operator-(const IndependentFactor< T, I, L > &op1, const IndependentFactor< T, I, L > &op2)
const BinaryViewExpression< E1, T1, E2, T2, marray_detail::Times< T1, T2, typename marray_detail::PromoteType< T1, T2 >::type > > operator*(const ViewExpression< E1, T1 > &expression1, const ViewExpression< E2, T2 > &expression2)
bool operator>(const IndicatorVariable< INDEX1_TYPE, LABEL1_TYPE > &indicatorVar1, const IndicatorVariable< INDEX2_TYPE, LABEL2_TYPE > &indicatorVar2)
View< T, false, A > & operator--(View< T, false, A > &v)
IndependentFactor< T, I, L > & operator+=(IndependentFactor< T, I, L > &op1, const T &op2)
IndependentFactor< T, I, L > operator+(const IndependentFactor< T, I, L > &op1, const IndependentFactor< T, I, L > &op2)
View< T, false, A > & operator++(View< T, false, A > &v)