acme
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages Concepts
iterator2.h
1#pragma once
2
3
4template < typename ITERATOR_TYPE >
5class random_access_iterator
6{
7public:
8
9 typedef ITERATOR_TYPE ITERATOR_BASE_TYPE;
10
11 ITERATOR_TYPE * m_p;
12
13
14 random_access_iterator(ITERATOR_TYPE * p)
15 {
16
17 m_p = p;
18
19 }
20
21
22 random_access_iterator(const random_access_iterator & it)
23 {
24
25 operator = (it);
26
27 }
28
29
30 random_access_iterator & operator = (const random_access_iterator & it)
31 {
32
33 m_p = it.m_p;
34
35 return *this;
36
37 }
38
39
40 bool operator == (const random_access_iterator & it)
41 {
42
43 return m_p == it.m_p;
44
45 }
46
47
48 bool operator != (const random_access_iterator & it)
49 {
50
51 return !operator==(it);
52
53 }
54
55
56 random_access_iterator operator ++(int)
57 {
58
59 random_access_iterator it = *this;
60
61 operator ++();
62
63 return it;
64
65 }
66
67
68 random_access_iterator operator --(int)
69 {
70
71 random_access_iterator it = *this;
72
73 operator --();
74
75 return it;
76
77 }
78
79
80 random_access_iterator & operator ++()
81 {
82
83 m_p++;
84
85 return *this;
86
87 }
88
89
90 random_access_iterator & operator +(iptr i)
91 {
92
93 m_p += i;
94
95 return *this;
96
97 }
98
99
100 random_access_iterator & operator --()
101 {
102
103 m_p--;
104
105 return *this;
106
107 }
108
109
110 random_access_iterator & operator -(iptr c)
111 {
112 m_p -= c;
113 return *this;
114 }
115
116 bool operator < (const random_access_iterator & i) const
117 {
118 return m_p < i.m_p;
119 }
120
121 ITERATOR_TYPE & operator * ()
122 {
123 return *m_p;
124 }
125
126 const ITERATOR_TYPE & operator * () const
127 {
128 return (const ITERATOR_TYPE &)*m_p;
129 }
130
131
132};
133
134
135template < typename ITERATOR_TYPE >
136class const_random_access_iterator
137{
138public:
139
140
141 const ITERATOR_TYPE * m_p;
142
143 const_random_access_iterator(const ITERATOR_TYPE * p)
144 {
145
146 m_p = p;
147
148 }
149
150 const_random_access_iterator(const random_access_iterator < ITERATOR_TYPE > & it)
151 {
152
153 operator = (it);
154
155 }
156
157
158 const_random_access_iterator(const const_random_access_iterator & it)
159 {
160
161 operator = (it);
162
163 }
164
165
166 const_random_access_iterator & operator = (const random_access_iterator < ITERATOR_TYPE > & it)
167 {
168
169 m_p = it.m_p;
170
171 return *this;
172
173 }
174
175
176 const_random_access_iterator & operator = (const const_random_access_iterator & it)
177 {
178
179 m_p = it.m_p;
180
181 return *this;
182
183 }
184
185
186 bool operator == (const const_random_access_iterator & it)
187 {
188
189 return m_p == it.m_p;
190
191 }
192
193
194 bool operator != (const const_random_access_iterator & it)
195 {
196
197 return !operator==(it);
198
199 }
200
201
202 const_random_access_iterator operator ++(int)
203 {
204
205 const_random_access_iterator it = *this;
206
207 operator ++();
208
209 return it;
210
211 }
212
213
214 const_random_access_iterator operator --(int)
215 {
216
217 const_random_access_iterator it = *this;
218
219 operator --();
220
221 return it;
222
223 }
224
225
226 const_random_access_iterator & operator ++()
227 {
228
229 m_p++;
230
231 return *this;
232
233 }
234
235
236 const_random_access_iterator & operator +(iptr i)
237 {
238
239 m_p += i;
240
241 return *this;
242
243 }
244
245
246 const_random_access_iterator & operator --()
247 {
248 m_p--;
249 return *this;
250 }
251
252 const_random_access_iterator & operator -(iptr i)
253 {
254 m_p -= i;
255 return *this;
256 }
257
258
259 bool operator < (const const_random_access_iterator & i) const
260 {
261
262 return m_p < i.m_p;
263
264 }
265
266 const ITERATOR_TYPE & operator * ()
267 {
268 return *((const ITERATOR_TYPE*)m_p);
269 }
270
271};
272
273//
274//
275//template < class ITERATOR >
276//struct iterator_info
277//{
278// typedef typename ITERATOR::ITERATOR_CATEGORY ITERATOR_CATEGORY;
279// typedef typename ITERATOR::VALUE_TYPE VALUE_TYPE;
280// typedef typename ITERATOR::DIFFERENCE_TYPE DIFFERENCE_TYPE;
281// typedef DIFFERENCE_TYPE DISTANCE_TYPE; // retained
282// typedef typename ITERATOR::POINTER POINTER;
283// typedef typename ITERATOR::REFERENCE REFERENCE;
284//};
285//
286//
287//template < typename TYPE >
288//struct iterator_info < TYPE * >
289//{
290// typedef random_access_iterator < TYPE * > ITERATOR_CATEGORY;
291// typedef TYPE VALUE_TYPE;
292// typedef ptrdiff_t DIFFERENCE_TYPE;
293// typedef ptrdiff_t DISTANCE_TYPE; // retained
294// typedef TYPE * POINTER;
295// typedef TYPE & REFERENCE;
296//};
297//
298//
299//template < typename TYPE >
300//struct iterator_info < const TYPE * >
301//{
302// typedef random_access_iterator < TYPE * > ITERATOR_CATEGORY;
303// typedef TYPE VALUE_TYPE;
304// typedef ptrdiff_t DIFFERENCE_TYPE;
305// typedef ptrdiff_t DISTANCE_TYPE; // retained
306// typedef const TYPE * POINTER;
307// typedef const TYPE & REFERENCE;
308//};
309//
310//
311