acme
Foundational cross-platform layer of the ca2 framework
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
89namespace 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
138template < typename ITERATOR >
139struct 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
158template < typename ITERATOR_BASE >
159struct 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
183template < typename ITERATOR_STRUCT >
184struct 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
include "aura/graphics/image/context.h"
Definition aaaa__defer.h:32