23#ifndef VCL_MESH_ITERATORS_ELEMENT_CONTAINER_ITERATOR_H
24#define VCL_MESH_ITERATORS_ELEMENT_CONTAINER_ITERATOR_H
32 template<
typename,
typename...>
38 using ContIt = std::conditional_t<
40 typename Container<T>::const_iterator,
41 typename Container<T>::iterator>;
46 using reference = std::conditional_t<CNST, const T&, T&>;
47 using pointer = std::conditional_t<CNST, const T*, T*>;
48 using iterator_category = std::random_access_iterator_tag;
75 difference_type) = &ElementContainerIterator::assignSumJump;
80 &ElementContainerIterator::diffJump;
95 mAssignSumFun = &ElementContainerIterator::assignSumFast;
96 mDiffFun = &ElementContainerIterator::diffFast;
102 while (mIt != mVec->end() && mIt->deleted()) {
108 reference operator*()
const {
return *mIt; }
110 pointer operator->()
const {
return &*mIt; }
114 return mIt ==
oi.mIt;
119 return mIt !=
oi.mIt;
126 return (this->*mPostIncrementFun)();
133 return (this->*mPostDecrementFun)();
138 return (this->*mAssignSumFun)(
n);
143 return (this->*mAssignSumFun)(-
n);
160 return (this->*mDiffFun)(
oi);
163 const reference operator[](difference_type
i)
const {
return *(*
this +
i); }
165 reference operator[](difference_type
i) {
return *(*
this +
i); }
179 return mIt <=
oi.mIt;
184 return mIt >=
oi.mIt;
196 }
while (mIt != mVec->end() && mIt->deleted());
209 }
while (mIt != mVec->end() && mIt->deleted());
242 }
while (mIt != mVec->begin() && mIt->deleted());
255 }
while (mIt != mVec->begin() && mIt->deleted());
282 difference_type
m =
n;
293 ElementContainerIterator& assignSumFast(difference_type n)
299 difference_type diffJump(
const ElementContainerIterator& oi)
const
301 ElementContainerIterator i = oi;
302 difference_type diff = 0;
310 difference_type diffFast(
const ElementContainerIterator& oi)
const
312 return this->mIt - oi.mIt;
317 template<
typename,
typename...>
321ElementContainerIterator<Container, T, C> operator+(
322 typename ElementContainerIterator<Container, T, C>::difference_type n,
323 const ElementContainerIterator<Container, T, C>& it)
328template<
template<
typename,
typename...>
typename Container,
typename T>
329using ConstElementContainerIterator =
330 ElementContainerIterator<Container, T, true>;
A class representing a box in N-dimensional space.
Definition box.h:46
Definition element_container_iterator.h:37
ElementContainerIterator postIncrementJump()
Post increment function that will be called if we need to jump deleted elements.
Definition element_container_iterator.h:204
ElementContainerIterator postDecrementFast()
Post decrement function that will be called if we don't need to jump deleted elements.
Definition element_container_iterator.h:273
ElementContainerIterator & decrementJump()
Decrement function that will be called if we need to jump deleted elements.
Definition element_container_iterator.h:238
ElementContainerIterator postIncrementFast()
Post increment function that will be called if we don't need to jump deleted elements.
Definition element_container_iterator.h:227
ElementContainerIterator & incrementJump()
Increment function that will be called if we need to jump deleted elements.
Definition element_container_iterator.h:192
ElementContainerIterator postDecrementJump()
Post decrement function that will be called if we need to jump deleted elements.
Definition element_container_iterator.h:250
ElementContainerIterator & decrementFast()
Decrement function that will be called if we don't need to jump deleted elements.
Definition element_container_iterator.h:263
ElementContainerIterator & incrementFast()
Increment function that will be called if we don't need to jump deleted elements.
Definition element_container_iterator.h:217