ZFFramework
 
Loading...
Searching...
No Matches
ZFCoreUtilAutoPtr.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_ZFCoreUtilAutoPtr_h_
7#define _ZFI_ZFCoreUtilAutoPtr_h_
8
9#include "ZFCoreTypeDef.h"
10
12
13// ============================================================
14// zflineFree
15template<typename T_POD>
16zfclassLikePOD _ZFP_zflineFreeContainer {
17public:
18 explicit _ZFP_zflineFreeContainer(ZF_IN T_POD *p) : p(p) {}
19 ~_ZFP_zflineFreeContainer(void) {
20 zffree(p);
21 }
22public:
23 T_POD *p;
24};
25template<typename T_POD>
26_ZFP_zflineFreeContainer<T_POD> _ZFP_zflineFreeWrapper(ZF_IN T_POD *p) {
27 return _ZFP_zflineFreeContainer<T_POD>(p);
28}
32#define zflineFree(obj) (_ZFP_zflineFreeWrapper(obj).p)
33
34// ============================================================
35// zfblockedFree
36zfclassLikePOD ZFLIB_ZFCore _ZFP_zfblockedFreeContainer {
37public:
38 _ZFP_zfblockedFreeContainer(ZF_IN void *p) : p(p) {}
39 ~_ZFP_zfblockedFreeContainer(void) {
40 zffree(this->p);
41 }
42private:
43 void *p;
44};
57#define zfblockedFree(obj) \
58 _ZFP_zfblockedFreeContainer ZFUniqueName(zfblockedFree_)(obj)
59
60// ============================================================
61// zflineDelete
62template<typename T_Object>
63zfclassLikePOD _ZFP_zflineDeleteContainer {
64public:
65 _ZFP_zflineDeleteContainer(ZF_IN const _ZFP_zflineDeleteContainer &ref) : p(ref.p) {}
66 _ZFP_zflineDeleteContainer(ZF_IN T_Object *p) : p(p) {}
67 ~_ZFP_zflineDeleteContainer(void) {
68 zfdelete(p);
69 }
70public:
71 T_Object *p;
72};
73template<typename T_Object>
74_ZFP_zflineDeleteContainer<T_Object> _ZFP_zflineDeleteWrapper(ZF_IN T_Object *p) {
75 return _ZFP_zflineDeleteContainer<T_Object>(p);
76}
80#define zflineDelete(obj) (_ZFP_zflineDeleteWrapper(obj).p)
81
82// ============================================================
83// zfblockedDelete
84typedef void (*_ZFP_zfblockedDeleteCallback)(ZF_IN void *p);
85template<typename T_Object>
86void _ZFP_zfblockedDeleteOnDelete(ZF_IN void *p) {
87 zfdelete((T_Object *)p);
88}
89zfclassLikePOD ZFLIB_ZFCore _ZFP_zfblockedDeleteContainer {
90public:
91 _ZFP_zfblockedDeleteContainer(void) : p(zfnull), deleteCallback(zfnull) {}
92 ~_ZFP_zfblockedDeleteContainer(void) {
93 if(this->p != zfnull) {
94 this->deleteCallback(this->p);
95 }
96 }
97public:
98 void *p;
99 _ZFP_zfblockedDeleteCallback deleteCallback;
100};
101template<typename T_Object>
102void _ZFP_zfblockedDeleteSetup(
103 ZF_IN _ZFP_zfblockedDeleteContainer *container
104 , ZF_IN T_Object * const &p
105 ) {
106 container->p = (void *)p;
107 container->deleteCallback = _ZFP_zfblockedDeleteOnDelete<T_Object>;
108}
121#define zfblockedDelete(obj) \
122 _ZFP_zfblockedDeleteContainer ZFUniqueName(zfblockedDelete_); \
123 _ZFP_zfblockedDeleteSetup(&ZFUniqueName(zfblockedDelete_), obj)
124
125// ============================================================
126// zfblockedCleanup
130#define zfblockedCleanup_1(action \
131 , P0, p0 \
132 ) \
133 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
134 public: \
135 ZFUniqueName(zfblockedCleanup_T)(P0 &p0) \
136 : p0(p0) \
137 {} \
138 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
139 action \
140 } \
141 private: \
142 P0 &p0; \
143 } ZFUniqueName(zfblockedCleanup_)(p0)
145#define zfblockedCleanup_2(action \
146 , P0, p0 \
147 , P1, p1 \
148 ) \
149 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
150 public: \
151 ZFUniqueName(zfblockedCleanup_T)(P0 &p0 \
152 , P1 &p1 \
153 ) \
154 : p0(p0) \
155 , p1(p1) \
156 {} \
157 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
158 action \
159 } \
160 private: \
161 P0 &p0; \
162 P1 &p1; \
163 } ZFUniqueName(zfblockedCleanup_)(p0 \
164 , p1 \
165 )
167#define zfblockedCleanup_3(action \
168 , P0, p0 \
169 , P1, p1 \
170 , P2, p2 \
171 ) \
172 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
173 public: \
174 ZFUniqueName(zfblockedCleanup_T)(P0 &p0 \
175 , P1 &p1 \
176 , P2 &p2 \
177 ) \
178 : p0(p0) \
179 , p1(p1) \
180 , p2(p2) \
181 {} \
182 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
183 action \
184 } \
185 private: \
186 P0 &p0; \
187 P1 &p1; \
188 P2 &p2; \
189 } ZFUniqueName(zfblockedCleanup_)(p0 \
190 , p1 \
191 , p2 \
192 )
194#define zfblockedCleanup_4(action \
195 , P0, p0 \
196 , P1, p1 \
197 , P2, p2 \
198 , P3, p3 \
199 ) \
200 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
201 public: \
202 ZFUniqueName(zfblockedCleanup_T)(P0 &p0 \
203 , P1 &p1 \
204 , P2 &p2 \
205 , P3 &p3 \
206 ) \
207 : p0(p0) \
208 , p1(p1) \
209 , p2(p2) \
210 , p3(p3) \
211 {} \
212 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
213 action \
214 } \
215 private: \
216 P0 &p0; \
217 P1 &p1; \
218 P2 &p2; \
219 P3 &p3; \
220 } ZFUniqueName(zfblockedCleanup_)(p0 \
221 , p1 \
222 , p2 \
223 , p3 \
224 )
226#define zfblockedCleanup_5(action \
227 , P0, p0 \
228 , P1, p1 \
229 , P2, p2 \
230 , P3, p3 \
231 , P4, p4 \
232 ) \
233 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
234 public: \
235 ZFUniqueName(zfblockedCleanup_T)(P0 &p0 \
236 , P1 &p1 \
237 , P2 &p2 \
238 , P3 &p3 \
239 , P4 &p4 \
240 ) \
241 : p0(p0) \
242 , p1(p1) \
243 , p2(p2) \
244 , p3(p3) \
245 , p4(p4) \
246 {} \
247 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
248 action \
249 } \
250 private: \
251 P0 &p0; \
252 P1 &p1; \
253 P2 &p2; \
254 P3 &p3; \
255 P4 &p4; \
256 } ZFUniqueName(zfblockedCleanup_)(p0 \
257 , p1 \
258 , p2 \
259 , p3 \
260 , p4 \
261 )
263#define zfblockedCleanup_6(action \
264 , P0, p0 \
265 , P1, p1 \
266 , P2, p2 \
267 , P3, p3 \
268 , P4, p4 \
269 , P5, p5 \
270 ) \
271 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
272 public: \
273 ZFUniqueName(zfblockedCleanup_T)(P0 &p0 \
274 , P1 &p1 \
275 , P2 &p2 \
276 , P3 &p3 \
277 , P4 &p4 \
278 , P5 &p5 \
279 ) \
280 : p0(p0) \
281 , p1(p1) \
282 , p2(p2) \
283 , p3(p3) \
284 , p4(p4) \
285 , p5(p5) \
286 {} \
287 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
288 action \
289 } \
290 private: \
291 P0 &p0; \
292 P1 &p1; \
293 P2 &p2; \
294 P3 &p3; \
295 P4 &p4; \
296 P5 &p5; \
297 } ZFUniqueName(zfblockedCleanup_)(p0 \
298 , p1 \
299 , p2 \
300 , p3 \
301 , p4 \
302 , p5 \
303 )
305#define zfblockedCleanup_7(action \
306 , P0, p0 \
307 , P1, p1 \
308 , P2, p2 \
309 , P3, p3 \
310 , P4, p4 \
311 , P5, p5 \
312 , P6, p6 \
313 ) \
314 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
315 public: \
316 ZFUniqueName(zfblockedCleanup_T)(P0 &p0 \
317 , P1 &p1 \
318 , P2 &p2 \
319 , P3 &p3 \
320 , P4 &p4 \
321 , P5 &p5 \
322 , P6 &p6 \
323 ) \
324 : p0(p0) \
325 , p1(p1) \
326 , p2(p2) \
327 , p3(p3) \
328 , p4(p4) \
329 , p5(p5) \
330 , p6(p6) \
331 {} \
332 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
333 action \
334 } \
335 private: \
336 P0 &p0; \
337 P1 &p1; \
338 P2 &p2; \
339 P3 &p3; \
340 P4 &p4; \
341 P5 &p5; \
342 P6 &p6; \
343 } ZFUniqueName(zfblockedCleanup_)(p0 \
344 , p1 \
345 , p2 \
346 , p3 \
347 , p4 \
348 , p5 \
349 , p6 \
350 )
352#define zfblockedCleanup_8(action \
353 , P0, p0 \
354 , P1, p1 \
355 , P2, p2 \
356 , P3, p3 \
357 , P4, p4 \
358 , P5, p5 \
359 , P6, p6 \
360 , P7, p7 \
361 ) \
362 zfclassLikePOD ZFUniqueName(zfblockedCleanup_T) { \
363 public: \
364 ZFUniqueName(zfblockedCleanup_T)(P0 &p0 \
365 , P1 &p1 \
366 , P2 &p2 \
367 , P3 &p3 \
368 , P4 &p4 \
369 , P5 &p5 \
370 , P6 &p6 \
371 , P7 &p7 \
372 ) \
373 : p0(p0) \
374 , p1(p1) \
375 , p2(p2) \
376 , p3(p3) \
377 , p4(p4) \
378 , p5(p5) \
379 , p6(p6) \
380 , p7(p7) \
381 {} \
382 ~ZFUniqueName(zfblockedCleanup_T)(void) { \
383 action \
384 } \
385 private: \
386 P0 &p0; \
387 P1 &p1; \
388 P2 &p2; \
389 P3 &p3; \
390 P4 &p4; \
391 P5 &p5; \
392 P6 &p6; \
393 P7 &p7; \
394 } ZFUniqueName(zfblockedCleanup_)(p0 \
395 , p1 \
396 , p2 \
397 , p3 \
398 , p4 \
399 , p5 \
400 , p6 \
401 , p7 \
402 )
403
405
406#endif // #ifndef _ZFI_ZFCoreUtilAutoPtr_h_
407
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
types for ZFFramework
#define zfclassLikePOD
shows the class is not a POD type, but you may use it like a POD except memset it to 0
Definition ZFCoreTypeDef_ClassType.h:41
#define zfdelete(instance)
same as delete defined for future use
Definition ZFCoreTypeDef_ClassType.h:91
#define zffree(ptr)
same as free defined for future use, do nothing if ptr is NULL
Definition ZFCoreTypeDef_ClassType.h:112
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98