acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
iterator2.h
1
#pragma once
2
3
4
template
<
typename
ITERATOR_TYPE >
5
class
random_access_iterator
6
{
7
public
:
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 ++(::i32)
57
{
58
59
random_access_iterator it = *
this
;
60
61
operator ++();
62
63
return
it;
64
65
}
66
67
68
random_access_iterator operator --(::i32)
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
135
template
<
typename
ITERATOR_TYPE >
136
class
const_random_access_iterator
137
{
138
public
:
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 ++(::i32)
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 --(::i32)
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
prototype
collection
iterator2.h
Generated by
1.17.0