C++ mpi module for stochmagnet_main Package
CORE_StrideIterator.h
1 #ifndef CORE_StrideIterator_HPP
2 #define CORE_StrideIterator_HPP
3 
4 #include <iterator>
5 
11 template<class Ptr_Type, tInt Step>
13 
14 public:
15 
16 
19  typedef typename std::iterator_traits<Ptr_Type>::value_type value_type;
22  typedef typename std::iterator_traits<Ptr_Type>::reference reference;
25  typedef typename std::iterator_traits<Ptr_Type>::pointer pointer;
26 
29  typedef typename std::iterator_traits<Ptr_Type>::difference_type difference_type;
32  typedef std::random_access_iterator_tag iterator_category;
33 
34 private:
35  //This class type
36  typedef CORE_StrideIterator self;
37 
38  Ptr_Type mPointer;
39 
40 public:
41 
42  //constructors
43  //============
44 
47  CORE_StrideIterator() : mPointer(NULL) {}
48 
52  explicit CORE_StrideIterator(Ptr_Type x) : mPointer(x) {}
53 
57  CORE_StrideIterator(const self& x) : mPointer(x.mPointer) {}
58 
59  //destructor
60  //==========
61  virtual ~CORE_StrideIterator() {
62  }
63 
64  //accessor operators
65  //=====================
69  reference operator*() { return *mPointer; }
70 
75  reference operator[](difference_type n) { return mPointer[n * Step]; }
76 
77 
78  //compount assignement operators
79  //===============================
80 
85  mPointer += x * Step;
86  return *this;
87  }
88 
89 
90  //increment & decrement operators
91  //================================
92 
95  self& operator++() {
96 
97  mPointer += Step;
98  return *this;
99  }
103  self operator++(int s) {
104  self tmp = *this; mPointer += Step; return tmp;
105  }
108  self& operator--() {
109  mPointer -= Step; return *this;
110  }
114  self operator--(int s) {
115  self tmp = *this; mPointer -= Step; return tmp;
116  }
117 
118 
119  //arithmetic operators
120  //====================
121 
127  friend self operator+(self x, difference_type y) {
128  //x+=y*step -> add step^2 !!
129  return (x+=y);
130  }
136  friend self operator+(difference_type x, self y) {
137  return (y+=x);
138  }
143  friend difference_type operator-(self x, self y) {
144  return (x.mPointer - y.mPointer) / Step;
145 
146  }
147 
148  //relational & comparison operators
149  //=================================
150 
151 
156  friend bool operator==(self x, self y) {
157  return x.mPointer == y.mPointer; }
162  friend bool operator!=(self x, self y) {
163  return x.mPointer != y.mPointer;
164  }
169  friend bool operator<(self x, self y) { return x.mPointer < y.mPointer; }
170 
171  //logical operators
172  //=================
173 
174  //bitwise operators
175  //=================
176 
177 
178 
179 
180 
181 };
182 
183 #endif
this class describes a const iterator with a constant stride 2 templates parameter:
Definition: CORE_StrideIterator.h:12
self operator--(int s)
return the current element and set the iterator to previous element
Definition: CORE_StrideIterator.h:114
std::iterator_traits< Ptr_Type >::reference reference
reference value type
Definition: CORE_StrideIterator.h:22
self & operator++()
return the next element and set the iterator to next element
Definition: CORE_StrideIterator.h:95
friend bool operator==(self x, self y)
compare the 2 iterator if equal
Definition: CORE_StrideIterator.h:156
std::iterator_traits< Ptr_Type >::value_type value_type
copy value type
Definition: CORE_StrideIterator.h:19
std::random_access_iterator_tag iterator_category
type of iterator
Definition: CORE_StrideIterator.h:32
friend difference_type operator-(self x, self y)
return the number of difference elements number between 2 iterators
Definition: CORE_StrideIterator.h:143
reference operator*()
return the pointer of the iterator
Definition: CORE_StrideIterator.h:69
CORE_StrideIterator(const self &x)
copy constructor
Definition: CORE_StrideIterator.h:57
reference operator[](difference_type n)
access to n-th element of the list
Definition: CORE_StrideIterator.h:75
self & operator--()
return the previous element and set the iterator to previous element
Definition: CORE_StrideIterator.h:108
friend self operator+(difference_type x, self y)
add x elements to y iterator : y:=y+x
Definition: CORE_StrideIterator.h:136
CORE_StrideIterator()
default constructor
Definition: CORE_StrideIterator.h:47
friend self operator+(self x, difference_type y)
add y element to x iterator : x:=x+y
Definition: CORE_StrideIterator.h:127
self & operator+=(difference_type x)
move the iterator on x elements
Definition: CORE_StrideIterator.h:84
self operator++(int s)
return the current element and set the iterator to next element
Definition: CORE_StrideIterator.h:103
std::iterator_traits< Ptr_Type >::difference_type difference_type
displacement type
Definition: CORE_StrideIterator.h:29
friend bool operator<(self x, self y)
compare the 2 iterators on same values
Definition: CORE_StrideIterator.h:169
CORE_StrideIterator(Ptr_Type x)
initializer constructor
Definition: CORE_StrideIterator.h:52
friend bool operator!=(self x, self y)
compare the 2 iterator if not equal
Definition: CORE_StrideIterator.h:162
std::iterator_traits< Ptr_Type >::pointer pointer
pointer value type
Definition: CORE_StrideIterator.h:25