26 #include "../error/exceptions.hpp"
53 template<
typename ITERABLE>
class container_iterator
80 typedef typename std::conditional<std::is_const<ITERABLE>::value,
81 const value_type*,value_type*>::type
pointer;
83 typedef typename std::conditional<std::is_const<ITERABLE>::value,
105 _container(container),
107 _maxsize(container->
size())
113 _container(i._container),
121 _container(i._container),
125 i._container =
nullptr;
138 if(
this == &i)
return *
this;
149 if(
this == &i)
return *
this;
151 i._container =
nullptr;
154 _maxsize = i._maxsize;
173 explicit operator bool()
const
175 return !( (!
_container)|| (_state >= _maxsize)|| (_state<0));
189 typename std::conditional<std::is_const<ITERABLE>::value,
196 return (*(_container))[
_state];
229 iterator_type temp = *
this;
246 iterator_type tmp = *
this;
274 if(_state != a.
_state)
return false;
283 if((*
this)==a)
return false;
298 return _state <= b.
_state;
312 return _state >= b.
_state;
337 template<
typename ITER>
338 container_iterator<ITER>
operator+(
const container_iterator<ITER> &a,
341 container_iterator<ITER> iter = a;
358 template<
typename ITER>
359 container_iterator<ITER>
operator+(ssize_t a,
360 const container_iterator<ITER> &b)
377 template<
typename ITER>
378 container_iterator<ITER>
operator-(
const container_iterator<ITER> &a,
381 container_iterator<ITER> iter = a;
398 template<
typename ITER>
399 ssize_t
operator-(
const container_iterator<ITER> &a,
400 const container_iterator<ITER> &b)
402 return a.state() - b.state();
iterator_type & operator=(const iterator_type &i)
copy assignment operator
Definition: container_iterator.hpp:136
ITERABLE * _container
pointer to the container object
Definition: container_iterator.hpp:67
#define EXCEPTION_RECORD
macro creating an instance of ExceptionRecord
Definition: exceptions.hpp:48
ITERABLE * cptr_type
pointer type of the container
Definition: container_iterator.hpp:65
container_iterator()
default constructor
Definition: container_iterator.hpp:93
bool operator>(const iterator_type &b)
greater than operator
Definition: container_iterator.hpp:303
bool operator!=(const iterator_type &a)
comparison operator - inequality
Definition: container_iterator.hpp:281
std::remove_const< ITERABLE >::type container_type
type of the container object
Definition: container_iterator.hpp:63
bool operator==(const iterator_type &a)
comparsion operator - equality
Definition: container_iterator.hpp:268
iterator type
Definition: container_iterator.hpp:59
iterator_type & operator--()
decrement operators
Definition: container_iterator.hpp:236
container_iterator(cptr_type container, size_t state=0)
constructor
Definition: container_iterator.hpp:104
container_iterator(iterator_type &&i)
move constructor
Definition: container_iterator.hpp:120
bool operator<=(const iterator_type &b)
lesser than equal operator
Definition: container_iterator.hpp:296
container_type::value_type value_type
value type of the container
Definition: container_iterator.hpp:78
Definition: add_op.hpp:29
ssize_t _state
actual position state of the iterator
Definition: container_iterator.hpp:70
scalar_iterator< ITERABLE > operator+(const scalar_iterator< ITERABLE > &a, ssize_t b)
add scalar to iterator
Definition: scalar_iterator.hpp:272
iterator_type & operator++()
increment iterator position
Definition: container_iterator.hpp:219
pointer operator->()
pointer access operator
Definition: container_iterator.hpp:209
iterator_type & operator=(iterator_type &&i)
move assignment operator
Definition: container_iterator.hpp:147
container_iterator< ITERABLE > iterator_type
iterator type
Definition: container_iterator.hpp:90
~container_iterator()
default constructor
Definition: container_iterator.hpp:132
iterator_type operator--(int)
decrement operators
Definition: container_iterator.hpp:244
iterator error
Definition: exceptions.hpp:692
std::random_access_iterator_tag iterator_category
type of iterator
Definition: container_iterator.hpp:88
bool operator>=(const iterator_type &b)
greater equal than operator
Definition: container_iterator.hpp:310
ssize_t difference_type
difference type of the iterator
Definition: container_iterator.hpp:86
bool operator<(const iterator_type &b)
lesser than operator
Definition: container_iterator.hpp:289
container_iterator(const iterator_type &i)
copy constructor
Definition: container_iterator.hpp:112
iterator_type & operator+=(ssize_t i)
compound assignment with +=
Definition: container_iterator.hpp:253
std::conditional< std::is_const< ITERABLE >::value, const value_type *, value_type * >::type pointer
pointer type the iterator provides
Definition: container_iterator.hpp:81
ssize_t state() const
get state of the iterator
Definition: container_iterator.hpp:316
iterator_type operator++(int)
increment iterator position
Definition: container_iterator.hpp:227
std::conditional< std::is_const< ITERABLE >::value, value_type, reference >::type operator*()
dereferencing operator
Definition: container_iterator.hpp:191
iterator_type & operator-=(ssize_t i)
compound assignment with -=
Definition: container_iterator.hpp:261
size_t size(const slice &s)
compute slice size
ssize_t _maxsize
maximum number of elements in the container
Definition: container_iterator.hpp:73
std::conditional< std::is_const< ITERABLE >::value, const value_type &, value_type & >::type reference
reference type the iterator provides
Definition: container_iterator.hpp:84
scalar_iterator< ITERABLE > operator-(const scalar_iterator< ITERABLE > &a, ssize_t b)
subtract offset from iterator
Definition: scalar_iterator.hpp:312