acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
_iterator.h
1
#pragma once
2
3
4
5
6
7
//#define __declare_iterator_struct(item_type, item_member) \
8
// struct const_iterator_struct : item_iterator < ITEM_TYPE > \
9
// { \
10
// using ITEM_TYPE = item_type; \
11
// using ITERATOR_ITEM_TYPE = item_type; \
12
// using container_iterator::container_iterator; \
13
// ITERATOR_ITEM_TYPE item_member; \
14
// ITERATOR_ITEM_TYPE & item () const { return ((iterator_struct *)this)->item_member; } \
15
// template < typename TYPE > \
16
// inline iterator_struct(const TYPE & t) { item_member = t.item(); m_pcontainer = t.container(); } \
17
// }; \
18
// struct iterator_struct : container_iterator < ITEM_TYPE > \
19
// { \
20
// using ITEM_TYPE = item_type; \
21
// using ITERATOR_ITEM_TYPE = item_type; \
22
// using CONST_ITERATOR = const_iterator_struct < container >; \
23
// using container_iterator::container_iterator; \
24
// ITERATOR_ITEM_TYPE item_member; \
25
// ITERATOR_ITEM_TYPE & item () const { return ((iterator_struct *)this)->item_member; } \
26
// template < typename TYPE > \
27
// inline iterator_struct(const TYPE & t) { item_member = t.item(); m_pcontainer = t.container(); } \
28
// }
29
30
//
31
//#define __declare_iterator_struct_ok(container, item_type, item_member, ok_declaration) \
32
// struct const_iterator_struct : container_iterator < container > \
33
// { \
34
// using CONTAINER = typename container_iterator < container >::CONTAINER; \
35
// using ITEM_TYPE = const item_type; \
36
// using ITERATOR_ITEM_TYPE = const item_type; \
37
// using container_iterator < container >::container_iterator; \
38
// ITERATOR_ITEM_TYPE item_member; \
39
// ITERATOR_ITEM_TYPE & item () { return ((const_iterator_struct *)this)->item_member; } \
40
// const ITERATOR_ITEM_TYPE & item () const { return ((const_iterator_struct *)this)->item_member; } \
41
// const_iterator_struct() {} \
42
// template < typename ITPTR > \
43
// inline const_iterator_struct(const ITPTR & t) { item_member = t.item(); this->m_pcontainer = t.container(); } \
44
// }; \
45
// struct iterator_struct : container_iterator < container > \
46
// { \
47
// using CONTAINER = typename container_iterator < container >::CONTAINER; \
48
// using ITEM_TYPE = item_type; \
49
// using ITERATOR_ITEM_TYPE = item_type; \
50
// using CONST_ITERATOR = const_iterator_struct < container >; \
51
// using container_iterator < container >::container_iterator; \
52
// ITERATOR_ITEM_TYPE item_member; \
53
// ITERATOR_ITEM_TYPE item_member ## Beg; \
54
// ITERATOR_ITEM_TYPE item_member ## End; \
55
// ITERATOR_ITEM_TYPE & item () { return ((iterator_struct *)this)->item_member; } \
56
// const ITERATOR_ITEM_TYPE & item () const { return ((iterator_struct *)this)->item_member; } \
57
// iterator_struct() {} \
58
// template < typename ITPTR > \
59
// inline iterator_struct(const ITPTR & t) { item_member = t.item(); this->m_pcontainer = t.container(); } \
60
// }; \
61
// template < typename ITERATOR_STRUCT > struct iterator_common : ITERATOR_STRUCT \
62
// { \
63
// using CONTAINER = typename ITERATOR_STRUCT::CONTAINER; \
64
// bool ok() const { return ok_declaration; } \
65
// using ITERATOR_ITEM_TYPE = typename ITERATOR_STRUCT::ITERATOR_ITEM_TYPE; \
66
//iterator_common() {} \
67
// void erase(ITERATOR_ITEM_TYPE p) { this->m_pcontainer->erase(p); } \
68
// }
69
70
71
72
73
//
74
//#define __declare_member_iterator(name, member) \
75
// template < typename ITERATOR > \
76
// struct name##_base : ITERATOR \
77
// { \
78
// using ITERATOR::ITERATOR; \
79
// auto operator *() { return (ITERATOR::operator *()).member; } \
80
// auto operator &() const { return (ITERATOR::operator *()).member(); } \
81
// }
82
83
//using name = make_iterator < wrap_iterator_base < name##_base < iterator_common < iterator_struct > > > >; \
84
//using const_##name = make_iterator < wrap_iterator_base < name##_base < iterator_common < const_iterator_struct > > > >; \
85
//using name##_range = make_iterator_range < name >; \
86
//using const_##name##_range = make_iterator_range < const_##name >
87
88
89
namespace
acme
90
{
91
92
93
namespace
iterator
94
{
95
96
97
//template < typename CONTAINER, typename ITERATOR >
98
//ITERATOR erase(CONTAINER & container, ITERATOR p)
99
//{
100
101
// auto pnext = p;
102
103
// if(p)
104
// {
105
106
// pnext++;
107
108
// container.erase(p);
109
110
// }
111
112
// return pnext;
113
114
//}
115
116
117
}
// namespace iterator
118
119
120
}
// namespace acme
121
122
123
// Range-based for loop support
124
// smart_pointer_range indirect/interpreted contribution from
137
138
template
<
typename
ITERATOR >
139
struct
make_iterator_range
140
{
141
142
ITERATOR m_begin;
143
ITERATOR m_end;
144
145
make_iterator_range(ITERATOR begin, ITERATOR end) :
146
m_begin(begin),
147
m_end(end)
148
{
149
}
150
151
ITERATOR begin()
const
{
return
m_begin; }
152
ITERATOR end()
const
{
return
m_end; }
153
154
};
155
156
157
158
template
<
typename
ITERATOR_BASE >
159
struct
wrap_iterator_base :
160
public
ITERATOR_BASE
161
{
162
163
using
CONTAINER =
typename
ITERATOR_BASE::CONTAINER;
164
165
using
ITERATOR_BASE::ITERATOR_BASE;
166
167
wrap_iterator_base() {}
168
169
bool
ended()
const
{
return
!this->ok(); }
170
171
operator
bool()
const
{
return
this->ok(); }
172
173
auto
operator -> () {
return
this->get_pointer(); }
174
175
auto
operator -> ()
const
{
return
this->get_pointer(); }
176
177
auto
& operator * () {
return
*this->get_pointer(); }
178
179
auto
& operator * ()
const
{
return
*this->get_pointer(); }
180
181
};
182
183
template
<
typename
ITERATOR_STRUCT >
184
struct
iterator_common :
185
ITERATOR_STRUCT
186
{
187
188
using
ITEM_TYPE =
typename
ITERATOR_STRUCT::ITEM_TYPE;
189
using
ITERATOR_STRUCT::ITERATOR_STRUCT;
190
191
iterator_common() {}
192
193
void
erase(ITEM_TYPE p) { this->m_pcontainer->erase(p); }
194
195
};
196
197
198
//typedef CLASS_DECL_ACME numeric_array < ::collection::index > index_array;
199
//typedef CLASS_DECL_ACME numeric_array < ::collection::count > count_array;
200
201
202
203
//#ifdef LINUX
204
//#include <initializer_list>
205
//#endif
206
207
208
209
210
211
212
#include "tiny_array.h"
213
214
215
//#include "base_array.h"
216
//#include "array.h"
217
218
acme
include "aura/graphics/image/context.h"
Definition
aaaa__defer.h:32
prototype
collection
_iterator.h
Generated by
1.17.0