acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
auto_pointer.h
1
#pragma once
2
3
4
#include "acme/memory/del.h"
5
6
struct
create_new_t
{};
7
8
enum
e_new_array
9
{
10
new_array,
11
12
};
13
14
template
<
typename
T >
15
class
auto_pointer
16
{
17
public
:
18
19
T * m_p;
20
//bool m_bArray;
21
22
auto_pointer()
23
{
24
25
m_p =
nullptr
;
26
//m_bArray = false;
27
28
}
29
auto_pointer(
create_new_t
)
30
{
31
32
m_p = øraw_new T;
33
//m_bArray = false;
34
35
}
36
37
//auto_pointer(e_new_array, ::collection::count c)
38
//{
39
// m_bArray = true;
40
// m_p = allocateø< T[ >(size_t) c];
41
42
//}
43
44
//auto_pointer(e_new_array, T * p)
45
//{
46
// m_bArray = true;
47
// m_p = p;
48
49
//}
50
51
52
//template < typename TYPE >
53
//auto_pointer(TYPE * p, ::collection::count c)
54
//{
55
//
56
// m_bArray = true;
57
58
// m_p = allocateø< T[ >(size_t)c];
59
60
// for (::collection::index i = 0; i < c; i++)
61
// {
62
//
63
// ::copy(&m_p[(size_t)i], &p[(size_t) i]);
64
65
// }
66
67
//}
68
69
70
//template < typename TYPE, typename COPY >
71
//auto_pointer(TYPE * p, ::collection::count c, COPY copy)
72
//{
73
74
// m_bArray = true;
75
76
// m_p = allocateø< T[ >(size_t)c];
77
78
// for (::collection::index i = 0; i < c; i++)
79
// {
80
81
// copy(&m_p[(size_t)i], &p[(size_t)i]);
82
83
// }
84
85
//}
86
87
88
auto_pointer(T * p)
89
{
90
91
m_p = p;
92
//m_bArray = false;
93
94
}
95
96
97
auto_pointer(
const
auto_pointer & op)
98
{
99
100
m_p = op.m_p;
101
//m_bArray = op.m_bArray;
102
103
}
104
105
106
auto_pointer(auto_pointer && op)
107
{
108
109
m_p = op.m_p;
110
//m_bArray = op.m_bArray;
111
op.m_p =
nullptr
;
112
113
114
}
115
116
117
~auto_pointer()
118
{
119
120
destroy();
121
122
}
123
124
//void create_array(::collection::count c)
125
//{
126
//
127
// destroy();
128
//
129
// m_bArray = true;
130
// m_p = allocateø< T[ >(size_t)c];
131
132
//}
133
134
135
void
destroy()
136
{
137
138
//if (m_bArray)
139
//{
140
141
// if (m_p)
142
// {
143
144
// delete[] m_p;
145
146
// m_p = NULL;
147
148
// }
149
150
//}
151
//else
152
{
153
154
::acme::del(m_p);
155
156
}
157
158
}
159
160
161
T * detach()
162
{
163
164
T * p = m_p;
165
166
m_p =
nullptr
;
167
168
return
p;
169
170
}
171
172
173
T * release()
174
{
175
176
return
detach();
177
178
}
179
180
181
T * get()
182
{
183
184
return
m_p;
185
186
}
187
188
189
T * get()
const
190
{
191
192
return
m_p;
193
194
}
195
196
operator
T *()
197
{
198
199
return
m_p;
200
201
}
202
203
204
operator
T *()
const
205
{
206
207
return
m_p;
208
209
}
210
211
212
T & operator *()
213
{
214
215
return
*m_p;
216
217
}
218
219
220
const
T & operator *()
const
221
{
222
223
return
*m_p;
224
225
}
226
227
void
reset(T * p)
228
{
229
230
if
(p == m_p)
231
{
232
233
return
;
234
235
}
236
237
destroy();
238
239
m_p = p;
240
241
}
242
243
244
auto_pointer & operator = (T * p)
245
{
246
247
reset(p);
248
249
return
*
this
;
250
251
}
252
253
auto_pointer & operator = (
const
auto_pointer & op)
254
{
255
256
reset(op.m_p);
257
258
return
*
this
;
259
260
}
261
262
263
auto_pointer & operator = (auto_pointer && op)
264
{
265
266
if
(op.m_p == m_p)
267
{
268
269
return
*
this
;
270
271
}
272
273
destroy();
274
275
m_p = op.m_p;
276
277
op.m_p =
nullptr
;
278
279
return
*
this
;
280
281
}
282
283
284
T * operator ->()
285
{
286
287
return
m_p;
288
289
}
290
291
292
const
T * operator ->()
const
293
{
294
295
return
m_p;
296
297
}
298
299
template
<
typename
TYPE >
300
bool
is()
301
{
302
303
return
dynamic_cast <
TYPE *
>
((T *)
this
);
304
305
}
306
307
};
308
312
//#define __AP(x) ::auto_pointer < x >
313
//#define ap(x) __AP(x)
314
315
316
template
<
typename
T>
317
inline
auto
as_auto_pointer(T* p)
318
{
319
320
return
auto_pointer < T >(p);
321
322
}
323
324
325
create_new_t
Definition
auto_pointer.h:6
platform
auto_pointer.h
Generated by
1.17.0