acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
holder.h
1
// Created by camilo on 2021-01-16 03:42 BRT <3ThomasBorregaardSorensen!!
2
#pragma once
3
4
5
template
<
typename
TYPE >
6
void
destroy_pointer(TYPE * p)
7
{
8
9
delete
p;
10
//cairo_surface_destroy(p);
11
12
}
13
template
<
typename
TYPE >
14
TYPE * copy_pointer(
const
TYPE * p)
15
{
16
17
return
new
TYPE(*p);
18
19
}
20
21
22
template
<
typename
TYPE >
23
class
holder
24
{
25
26
TYPE * m_p;
27
28
public
:
29
30
31
32
holder() :
33
m_p(
nullptr
)
34
{
35
36
}
37
38
39
holder(TYPE * p) :
40
m_p(p)
41
{
42
43
}
44
45
holder(
const
holder & holder)
46
{
47
48
m_p = copy_pointer(holder.m_p);
49
50
}
51
52
holder(holder&& holder) :
53
m_p(holder.m_p)
54
{
55
56
holder.m_p =
nullptr
;
57
58
}
59
60
~holder()
61
{
62
63
destroy();
64
65
}
66
67
68
void
destroy()
69
{
70
71
if
(m_p)
72
{
73
74
destroy_pointer(m_p);
75
76
m_p =
nullptr
;
77
78
}
79
80
}
81
82
83
holder& operator = (TYPE * p)
84
{
85
86
if
(m_p != p)
87
{
88
89
destroy();
90
91
m_p = p;
92
93
}
94
95
return
*
this
;
96
97
}
98
99
holder& operator = (holder && holder)
100
{
101
102
if
(m_p != holder.m_p)
103
{
104
105
m_p = holder.m_p;
106
107
holder.m_p =
nullptr
;
108
109
}
110
111
return
*
this
;
112
113
}
114
115
holder & operator = (
const
holder & holder)
116
{
117
118
destroy();
119
120
m_p = copy_pointer(holder.m_p);
121
122
return
*
this
;
123
124
}
125
126
operator
TYPE *() {
return
m_p; }
127
128
operator
const
TYPE * ()
const
{
return
m_p; }
129
130
TYPE * operator -> () {
return
m_p; }
131
132
const
TYPE * operator -> ()
const
{
return
m_p; }
133
134
TYPE & operator *() {
return
*m_p; }
135
136
const
TYPE & operator *()
const
{
return
*m_p; }
137
138
};
139
140
141
template
<
typename
TYPE >
142
holder < TYPE > hold(TYPE * p)
143
{
144
145
return
{p};
146
147
}
148
149
//using cairo_surface_holder = pointer_holder < cairo_surface_t* >;
150
151
152
153
//template < typename TYPE >
154
//class heap_object
155
//{
156
// TYPE m_p;
157
//
158
//
159
//public:
160
//
161
// heap_object(nullptr_t)
162
// {
163
// m_p = nullptr;
164
// }
165
//
166
// heap_object()
167
// {
168
// m_p = new TYPE;
169
// }
170
//
171
//
172
// heap_object(TYPE * p)
173
// {
174
//
175
// m_p = p;
176
//
177
// }
178
//
179
// heap_object(const heap_object & object)
180
// {
181
//
182
// m_p = new heap_object(object);
183
//
184
// }
185
//
186
//
187
// heap_object(heap_object && object) :
188
// m_p(object.m_p)
189
// {
190
//
191
// object.m_p = nullptr;
192
//
193
// }
194
//
195
// ~heap_object()
196
// {
197
//
198
// destroy();
199
//
200
// }
201
//
202
//
203
// void destroy()
204
// {
205
//
206
// if (m_p)
207
// {
208
//
209
// delete m_p;
210
//
211
// m_p = nullptr;
212
//
213
// }
214
//
215
// }
216
//
217
//
218
// heap_object & operator = (TYPE * p)
219
// {
220
//
221
// if (m_p != p)
222
// {
223
//
224
// destroy();
225
//
226
// m_p = p;
227
//
228
// }
229
//
230
// return *this;
231
//
232
// }
233
//
234
// heap_object & operator = (heap_object && object)
235
// {
236
//
237
// if (m_p != holder.m_p)
238
// {
239
//
240
// m_p = holder.m_p;
241
//
242
// holder.m_p = nullptr;
243
//
244
// }
245
//
246
// return *this;
247
//
248
// }
249
//
250
// operator TYPE *() { return m_p; }
251
//
252
//};
253
//
254
//
255
//
256
257
//
258
//template < typename TYPE >
259
//class pointer_object
260
//{
261
//
262
// TYPE * m_p;
263
//
264
//public:
265
//
266
//
267
// pointer_object() :
268
// m_p(nullptr)
269
// {
270
//
271
// }
272
//
273
//
274
// pointer_object(TYPE * p) :
275
// m_p(p)
276
// {
277
//
278
// }
279
//
280
// pointer_object(const pointer_object & pointerobject)
281
// {
282
//
283
// m_p = copy_pointer(pointerobject.m_p);
284
//
285
// }
286
//
287
// pointer_object(pointer_object && pointerobject) :
288
// m_p(pointerobject.m_p)
289
// {
290
//
291
// pointerobject.m_p = nullptr;
292
//
293
// }
294
//
295
// ~pointer_object()
296
// {
297
//
298
// destroy();
299
//
300
// }
301
//
302
//
303
// void destroy()
304
// {
305
//
306
// if (m_p)
307
// {
308
//
309
// destroy_pointer(m_p);
310
//
311
// m_p = nullptr;
312
//
313
// }
314
//
315
// }
316
//
317
//
318
// pointer_object & operator = (TYPE * p)
319
// {
320
//
321
// if (m_p != p)
322
// {
323
//
324
// destroy();
325
//
326
// m_p = p;
327
//
328
// }
329
//
330
// return *this;
331
//
332
// }
333
//
334
// pointer_object & operator = (pointer_object && pointerobject)
335
// {
336
//
337
// if (m_p != pointerobject.m_p)
338
// {
339
//
340
// m_p = pointerobject.m_p;
341
//
342
// pointerobject.m_p = nullptr;
343
//
344
// }
345
//
346
// return *this;
347
//
348
// }
349
//
350
// pointer_object & operator = (const pointer_object & pointerobject)
351
// {
352
//
353
// destroy();
354
//
355
// m_p = copy_pointer(pointerobject.m_p);
356
//
357
// return *this;
358
//
359
// }
360
//
361
// operator TYPE & () { return *m_p; }
362
//
363
// operator const TYPE & () const { return *m_p; }
364
//
365
//};
366
367
368
//using cairo_surface_holder = pointer_holder < cairo_surface_t* >;
369
370
371
372
//template < typename TYPE >
373
//class heap_object
374
//{
375
// TYPE m_p;
376
//
377
//
378
//public:
379
//
380
// heap_object(nullptr_t)
381
// {
382
// m_p = nullptr;
383
// }
384
//
385
// heap_object()
386
// {
387
// m_p = new TYPE;
388
// }
389
//
390
//
391
// heap_object(TYPE * p)
392
// {
393
//
394
// m_p = p;
395
//
396
// }
397
//
398
// heap_object(const heap_object & object)
399
// {
400
//
401
// m_p = new heap_object(object);
402
//
403
// }
404
//
405
//
406
// heap_object(heap_object && object) :
407
// m_p(object.m_p)
408
// {
409
//
410
// object.m_p = nullptr;
411
//
412
// }
413
//
414
// ~heap_object()
415
// {
416
//
417
// destroy();
418
//
419
// }
420
//
421
//
422
// void destroy()
423
// {
424
//
425
// if (m_p)
426
// {
427
//
428
// delete m_p;
429
//
430
// m_p = nullptr;
431
//
432
// }
433
//
434
// }
435
//
436
//
437
// heap_object & operator = (TYPE * p)
438
// {
439
//
440
// if (m_p != p)
441
// {
442
//
443
// destroy();
444
//
445
// m_p = p;
446
//
447
// }
448
//
449
// return *this;
450
//
451
// }
452
//
453
// heap_object & operator = (heap_object && object)
454
// {
455
//
456
// if (m_p != holder.m_p)
457
// {
458
//
459
// m_p = holder.m_p;
460
//
461
// holder.m_p = nullptr;
462
//
463
// }
464
//
465
// return *this;
466
//
467
// }
468
//
469
// operator TYPE *() { return m_p; }
470
//
471
//};
472
//
473
//
474
//
prototype
prototype
holder.h
Generated by
1.17.0