ZFFramework
Loading...
Searching...
No Matches
ZFObjectDeclare.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_ZFObjectDeclare_h_
7#define _ZFI_ZFObjectDeclare_h_
8
9#include "zfany.h"
11
12// ============================================================
13template<typename T_zfsuper, typename T_superInterface, int superImplementInterface>
14zfclassNotPOD _ZFP_zfsuperI {
15public:
16 typedef T_superInterface SuperType;
17};
18template<typename T_zfsuper, typename T_superInterface>
19zfclassNotPOD _ZFP_zfsuperI<T_zfsuper, T_superInterface, 1> {
20public:
21 typedef T_zfsuper SuperType;
22};
26#define zfsuperI(T_SuperType) \
27 _ZFP_zfsuperI<zfsuper, T_SuperType, zftIsTypeOf<zfsuper, T_SuperType>::Value>::SuperType
28
29// ============================================================
30#define _ZFP_ZFOBJECT_DECLARE_PROTECTED_CONSTRUCTOR(ChildClass, SuperClass) \
31 protected: \
32 \
33 ChildClass(void) : SuperClass() {} \
34 virtual ~ChildClass(void) {} \
35 \
36 public:
37#define _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
38 ZFCLASS_DISALLOW_COPY_CONSTRUCTOR(ChildClass) \
39 public: \
40 static void _ZFP_zftIsZFObject(void) {} \
41 protected: \
42 \
43 typedef SuperClass zfsuper; \
44 \
45 typedef ChildClass zfself; \
46 public: \
47 \
48 template<typename T_ZFObject> \
49 inline T_ZFObject to(void) { \
50 return zfcast(T_ZFObject, this); \
51 } \
52 virtual inline ZFObject *toObject(void) { \
53 return this; \
54 } \
55 \
56 public: \
57 \
58 virtual inline const ZFClass *classData(void) { \
59 return this->classDynamic() ? this->classDynamic() : zfself::ClassData(); \
60 } \
61 private: \
62 static void _ZFP_ObjI_regCk(ZF_IN ZFClass *cls) { \
63 if(!cls->_ZFP_ZFClass_interfaceHasRegisterCk()) { \
64 cls->_ZFP_ZFClass_interfaceHasRegisterCk(zftrue); \
65 if(zfself::_ZFP_ObjI_reg != zfsuper::_ZFP_ObjI_reg) { \
66 zfself::_ZFP_ObjI_reg(cls); \
67 } \
68 } \
69 } \
70 public:
71#define _ZFP_ZFOBJECT_DECLARE_OBJECT(ChildClass, SuperClass, OuterClass, ...) \
72 public: \
73 enum {_ZFP_ZFObjectCanAlloc = 1}; \
74 public: \
75 zfpoolDeclareFriend() \
76 friend zfclassFwd _ZFP_ObjACk<zfself, 0>; \
77 friend zfclassFwd _ZFP_ObjACk<zfself, 1>; \
78 static ZFObject *_ZFP_Obj_ctor(void) { \
79 return zfpoolNew(zfself); \
80 } \
81 static void _ZFP_Obj_dtor(ZF_IN ZFObject *obj) { \
82 zfpoolDelete(_ZFP_ObjCastInternal(zfself *, obj)); \
83 } \
84 \
85 static const ZFClass *ClassData(void) { \
86 static _ZFP_ZFClassRegisterHolder h( \
87 ZF_NAMESPACE_CURRENT() \
88 , zftext(#ChildClass) \
89 , zfsuper::ClassData() \
90 , OuterClass::ClassData() \
91 , (zfself::_ZFP_ZFObjectCanAllocPublic != 0) \
92 , &zfself::_ZFP_Obj_ctor \
93 , &zfself::_ZFP_Obj_dtor \
94 , &zfself::_ZFP_ObjI_regCk \
95 ); \
96 return h.cls; \
97 }
98#define _ZFP_ZFOBJECT_DECLARE_ABSTRACT(ChildClass, SuperClass, OuterClass, ...) \
99 public: \
100 typedef enum {_ZFP_ZFObjectCanAlloc = 0} _ZFP_ZFObjectCanAllocChecker; \
101 public: \
102 \
103 static const ZFClass *ClassData(void) { \
104 static _ZFP_ZFClassRegisterHolder h( \
105 ZF_NAMESPACE_CURRENT() \
106 , zftext(#ChildClass) \
107 , zfsuper::ClassData() \
108 , OuterClass::ClassData() \
109 , (zfself::_ZFP_ZFObjectCanAllocPublic != 0) \
110 , zfnull \
111 , zfnull \
112 , &zfself::_ZFP_ObjI_regCk \
113 ); \
114 return h.cls; \
115 }
122#define ZFOBJECT_DECLARE(ChildClass, SuperClass, ...) \
123 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
124 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_OBJECT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
125 _ZFP_ZFOBJECT_DECLARE_PROTECTED_CONSTRUCTOR(ChildClass, SuperClass) \
126 public:
127
138#define ZFOBJECT_DECLARE_WITH_CUSTOM_CTOR(ChildClass, SuperClass, ...) \
139 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
140 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_OBJECT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
141 public:
142
148#define ZFOBJECT_DECLARE_ABSTRACT(ChildClass, SuperClass, ...) \
149 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
150 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_ABSTRACT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
151 _ZFP_ZFOBJECT_DECLARE_PROTECTED_CONSTRUCTOR(ChildClass, SuperClass) \
152 public:
153
156#define ZFOBJECT_DECLARE_ABSTRACT_WITH_CUSTOM_CTOR(ChildClass, SuperClass, ...) \
157 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
158 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_ABSTRACT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
159 public:
160
205#define ZFOBJECT_REGISTER(T_ZFObject, ...) \
206 _ZFP_ZFOBJECT_REGISTER( \
207 _ZFP_ZFOBJECT_REGISTER_regSig(ZFM_PARAM_NUM(T_ZFObject, ##__VA_ARGS__), T_ZFObject, ##__VA_ARGS__), \
208 ZFM_FIX_PARAM(_ZFP_ZFOBJECT_REGISTER_clsSig_EXPAND, ZFM_EMPTY, T_ZFObject, ##__VA_ARGS__) \
209 )
210#define _ZFP_ZFOBJECT_REGISTER(regSig, clsSig) \
211 _ZFP_ZFOBJECT_REGISTER_(regSig, clsSig)
212#define _ZFP_ZFOBJECT_REGISTER_(regSig, clsSig) \
213 ZF_STATIC_REGISTER_INIT(regSig) { \
214 clsSig ClassData(); \
215 } \
216 ZF_STATIC_REGISTER_END(regSig)
217
218#define _ZFP_ZFOBJECT_REGISTER_regSig_1(T0) ObjR_##T0
219#define _ZFP_ZFOBJECT_REGISTER_regSig_2(T0, T1) ObjR_##T0##_##T1
220#define _ZFP_ZFOBJECT_REGISTER_regSig_3(T0, T1, T2) ObjR_##T0##_##T1##_##T2
221#define _ZFP_ZFOBJECT_REGISTER_regSig_4(T0, T1, T2, T3) ObjR_##T0##_##T1##_##T2##_##T3
222#define _ZFP_ZFOBJECT_REGISTER_regSig_(N, T, ...) _ZFP_ZFOBJECT_REGISTER_regSig_##N(T, ##__VA_ARGS__)
223#define _ZFP_ZFOBJECT_REGISTER_regSig(N, T, ...) _ZFP_ZFOBJECT_REGISTER_regSig_(N, T, ##__VA_ARGS__)
224
225#define _ZFP_ZFOBJECT_REGISTER_clsSig_EXPAND(T) T::
226
241#define ZFOBJECT_PRIVATE_ALLOC(...) \
242 public: \
243 enum {_ZFP_ZFObjectCanAllocPublic = 0}; \
244 protected:
245
246// ============================================================
250#define ZFOBJECT_ON_INIT_INLINE_1( \
251 ZFMP_0 \
252 ) \
253 ZFMETHOD_INLINE_DETAIL_1( \
254 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
255 void, objectOnInit \
256 , _ZFP_mP_EXPAND(ZFMP_0) \
257 )
259#define ZFOBJECT_ON_INIT_DECLARE_1( \
260 ZFMP_0 \
261 ) \
262 ZFMETHOD_DECLARE_DETAIL_1( \
263 protected, ZFMethodTypeVirtual, \
264 void, objectOnInit \
265 , _ZFP_mP_EXPAND(ZFMP_0) \
266 )
268#define ZFOBJECT_ON_INIT_DEFINE_1(OwnerClass \
269 , ZFMP_0 \
270 ) \
271 ZFMETHOD_DEFINE_1(OwnerClass, void, objectOnInit \
272 , _ZFP_mP_EXPAND(ZFMP_0) \
273 )
275#define ZFOBJECT_ON_INIT_INLINE_2( \
276 ZFMP_0 \
277 , ZFMP_1 \
278 ) \
279 ZFMETHOD_INLINE_DETAIL_2( \
280 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
281 void, objectOnInit \
282 , _ZFP_mP_EXPAND(ZFMP_0) \
283 , _ZFP_mP_EXPAND(ZFMP_1) \
284 )
286#define ZFOBJECT_ON_INIT_DECLARE_2( \
287 ZFMP_0 \
288 , ZFMP_1 \
289 ) \
290 ZFMETHOD_DECLARE_DETAIL_2( \
291 protected, ZFMethodTypeVirtual, \
292 void, objectOnInit \
293 , _ZFP_mP_EXPAND(ZFMP_0) \
294 , _ZFP_mP_EXPAND(ZFMP_1) \
295 )
297#define ZFOBJECT_ON_INIT_DEFINE_2(OwnerClass \
298 , ZFMP_0 \
299 , ZFMP_1 \
300 ) \
301 ZFMETHOD_DEFINE_2(OwnerClass, void, objectOnInit \
302 , _ZFP_mP_EXPAND(ZFMP_0) \
303 , _ZFP_mP_EXPAND(ZFMP_1) \
304 )
306#define ZFOBJECT_ON_INIT_INLINE_3( \
307 ZFMP_0 \
308 , ZFMP_1 \
309 , ZFMP_2 \
310 ) \
311 ZFMETHOD_INLINE_DETAIL_3( \
312 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
313 void, objectOnInit \
314 , _ZFP_mP_EXPAND(ZFMP_0) \
315 , _ZFP_mP_EXPAND(ZFMP_1) \
316 , _ZFP_mP_EXPAND(ZFMP_2) \
317 )
319#define ZFOBJECT_ON_INIT_DECLARE_3( \
320 ZFMP_0 \
321 , ZFMP_1 \
322 , ZFMP_2 \
323 ) \
324 ZFMETHOD_DECLARE_DETAIL_3( \
325 protected, ZFMethodTypeVirtual, \
326 void, objectOnInit \
327 , _ZFP_mP_EXPAND(ZFMP_0) \
328 , _ZFP_mP_EXPAND(ZFMP_1) \
329 , _ZFP_mP_EXPAND(ZFMP_2) \
330 )
332#define ZFOBJECT_ON_INIT_DEFINE_3(OwnerClass \
333 , ZFMP_0 \
334 , ZFMP_1 \
335 , ZFMP_2 \
336 ) \
337 ZFMETHOD_DEFINE_3(OwnerClass, void, objectOnInit \
338 , _ZFP_mP_EXPAND(ZFMP_0) \
339 , _ZFP_mP_EXPAND(ZFMP_1) \
340 , _ZFP_mP_EXPAND(ZFMP_2) \
341 )
343#define ZFOBJECT_ON_INIT_INLINE_4( \
344 ZFMP_0 \
345 , ZFMP_1 \
346 , ZFMP_2 \
347 , ZFMP_3 \
348 ) \
349 ZFMETHOD_INLINE_DETAIL_4( \
350 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
351 void, objectOnInit \
352 , _ZFP_mP_EXPAND(ZFMP_0) \
353 , _ZFP_mP_EXPAND(ZFMP_1) \
354 , _ZFP_mP_EXPAND(ZFMP_2) \
355 , _ZFP_mP_EXPAND(ZFMP_3) \
356 )
358#define ZFOBJECT_ON_INIT_DECLARE_4( \
359 ZFMP_0 \
360 , ZFMP_1 \
361 , ZFMP_2 \
362 , ZFMP_3 \
363 ) \
364 ZFMETHOD_DECLARE_DETAIL_4( \
365 protected, ZFMethodTypeVirtual, \
366 void, objectOnInit \
367 , _ZFP_mP_EXPAND(ZFMP_0) \
368 , _ZFP_mP_EXPAND(ZFMP_1) \
369 , _ZFP_mP_EXPAND(ZFMP_2) \
370 , _ZFP_mP_EXPAND(ZFMP_3) \
371 )
373#define ZFOBJECT_ON_INIT_DEFINE_4(OwnerClass \
374 , ZFMP_0 \
375 , ZFMP_1 \
376 , ZFMP_2 \
377 , ZFMP_3 \
378 ) \
379 ZFMETHOD_DEFINE_4(OwnerClass, void, objectOnInit \
380 , _ZFP_mP_EXPAND(ZFMP_0) \
381 , _ZFP_mP_EXPAND(ZFMP_1) \
382 , _ZFP_mP_EXPAND(ZFMP_2) \
383 , _ZFP_mP_EXPAND(ZFMP_3) \
384 )
386#define ZFOBJECT_ON_INIT_INLINE_5( \
387 ZFMP_0 \
388 , ZFMP_1 \
389 , ZFMP_2 \
390 , ZFMP_3 \
391 , ZFMP_4 \
392 ) \
393 ZFMETHOD_INLINE_DETAIL_5( \
394 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
395 void, objectOnInit \
396 , _ZFP_mP_EXPAND(ZFMP_0) \
397 , _ZFP_mP_EXPAND(ZFMP_1) \
398 , _ZFP_mP_EXPAND(ZFMP_2) \
399 , _ZFP_mP_EXPAND(ZFMP_3) \
400 , _ZFP_mP_EXPAND(ZFMP_4) \
401 )
403#define ZFOBJECT_ON_INIT_DECLARE_5( \
404 ZFMP_0 \
405 , ZFMP_1 \
406 , ZFMP_2 \
407 , ZFMP_3 \
408 , ZFMP_4 \
409 ) \
410 ZFMETHOD_DECLARE_DETAIL_5( \
411 protected, ZFMethodTypeVirtual, \
412 void, objectOnInit \
413 , _ZFP_mP_EXPAND(ZFMP_0) \
414 , _ZFP_mP_EXPAND(ZFMP_1) \
415 , _ZFP_mP_EXPAND(ZFMP_2) \
416 , _ZFP_mP_EXPAND(ZFMP_3) \
417 , _ZFP_mP_EXPAND(ZFMP_4) \
418 )
420#define ZFOBJECT_ON_INIT_DEFINE_5(OwnerClass \
421 , ZFMP_0 \
422 , ZFMP_1 \
423 , ZFMP_2 \
424 , ZFMP_3 \
425 , ZFMP_4 \
426 ) \
427 ZFMETHOD_DEFINE_5(OwnerClass, void, objectOnInit \
428 , _ZFP_mP_EXPAND(ZFMP_0) \
429 , _ZFP_mP_EXPAND(ZFMP_1) \
430 , _ZFP_mP_EXPAND(ZFMP_2) \
431 , _ZFP_mP_EXPAND(ZFMP_3) \
432 , _ZFP_mP_EXPAND(ZFMP_4) \
433 )
435#define ZFOBJECT_ON_INIT_INLINE_6( \
436 ZFMP_0 \
437 , ZFMP_1 \
438 , ZFMP_2 \
439 , ZFMP_3 \
440 , ZFMP_4 \
441 , ZFMP_5 \
442 ) \
443 ZFMETHOD_INLINE_DETAIL_6( \
444 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
445 void, objectOnInit \
446 , _ZFP_mP_EXPAND(ZFMP_0) \
447 , _ZFP_mP_EXPAND(ZFMP_1) \
448 , _ZFP_mP_EXPAND(ZFMP_2) \
449 , _ZFP_mP_EXPAND(ZFMP_3) \
450 , _ZFP_mP_EXPAND(ZFMP_4) \
451 , _ZFP_mP_EXPAND(ZFMP_5) \
452 )
454#define ZFOBJECT_ON_INIT_DECLARE_6( \
455 ZFMP_0 \
456 , ZFMP_1 \
457 , ZFMP_2 \
458 , ZFMP_3 \
459 , ZFMP_4 \
460 , ZFMP_5 \
461 ) \
462 ZFMETHOD_DECLARE_DETAIL_6( \
463 protected, ZFMethodTypeVirtual, \
464 void, objectOnInit \
465 , _ZFP_mP_EXPAND(ZFMP_0) \
466 , _ZFP_mP_EXPAND(ZFMP_1) \
467 , _ZFP_mP_EXPAND(ZFMP_2) \
468 , _ZFP_mP_EXPAND(ZFMP_3) \
469 , _ZFP_mP_EXPAND(ZFMP_4) \
470 , _ZFP_mP_EXPAND(ZFMP_5) \
471 )
473#define ZFOBJECT_ON_INIT_DEFINE_6(OwnerClass \
474 , ZFMP_0 \
475 , ZFMP_1 \
476 , ZFMP_2 \
477 , ZFMP_3 \
478 , ZFMP_4 \
479 , ZFMP_5 \
480 ) \
481 ZFMETHOD_DEFINE_6(OwnerClass, void, objectOnInit \
482 , _ZFP_mP_EXPAND(ZFMP_0) \
483 , _ZFP_mP_EXPAND(ZFMP_1) \
484 , _ZFP_mP_EXPAND(ZFMP_2) \
485 , _ZFP_mP_EXPAND(ZFMP_3) \
486 , _ZFP_mP_EXPAND(ZFMP_4) \
487 , _ZFP_mP_EXPAND(ZFMP_5) \
488 )
490#define ZFOBJECT_ON_INIT_INLINE_7( \
491 ZFMP_0 \
492 , ZFMP_1 \
493 , ZFMP_2 \
494 , ZFMP_3 \
495 , ZFMP_4 \
496 , ZFMP_5 \
497 , ZFMP_6 \
498 ) \
499 ZFMETHOD_INLINE_DETAIL_7( \
500 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
501 void, objectOnInit \
502 , _ZFP_mP_EXPAND(ZFMP_0) \
503 , _ZFP_mP_EXPAND(ZFMP_1) \
504 , _ZFP_mP_EXPAND(ZFMP_2) \
505 , _ZFP_mP_EXPAND(ZFMP_3) \
506 , _ZFP_mP_EXPAND(ZFMP_4) \
507 , _ZFP_mP_EXPAND(ZFMP_5) \
508 , _ZFP_mP_EXPAND(ZFMP_6) \
509 )
511#define ZFOBJECT_ON_INIT_DECLARE_7( \
512 ZFMP_0 \
513 , ZFMP_1 \
514 , ZFMP_2 \
515 , ZFMP_3 \
516 , ZFMP_4 \
517 , ZFMP_5 \
518 , ZFMP_6 \
519 ) \
520 ZFMETHOD_DECLARE_DETAIL_7( \
521 protected, ZFMethodTypeVirtual, \
522 void, objectOnInit \
523 , _ZFP_mP_EXPAND(ZFMP_0) \
524 , _ZFP_mP_EXPAND(ZFMP_1) \
525 , _ZFP_mP_EXPAND(ZFMP_2) \
526 , _ZFP_mP_EXPAND(ZFMP_3) \
527 , _ZFP_mP_EXPAND(ZFMP_4) \
528 , _ZFP_mP_EXPAND(ZFMP_5) \
529 , _ZFP_mP_EXPAND(ZFMP_6) \
530 )
532#define ZFOBJECT_ON_INIT_DEFINE_7(OwnerClass \
533 , ZFMP_0 \
534 , ZFMP_1 \
535 , ZFMP_2 \
536 , ZFMP_3 \
537 , ZFMP_4 \
538 , ZFMP_5 \
539 , ZFMP_6 \
540 ) \
541 ZFMETHOD_DEFINE_7(OwnerClass, void, objectOnInit \
542 , _ZFP_mP_EXPAND(ZFMP_0) \
543 , _ZFP_mP_EXPAND(ZFMP_1) \
544 , _ZFP_mP_EXPAND(ZFMP_2) \
545 , _ZFP_mP_EXPAND(ZFMP_3) \
546 , _ZFP_mP_EXPAND(ZFMP_4) \
547 , _ZFP_mP_EXPAND(ZFMP_5) \
548 , _ZFP_mP_EXPAND(ZFMP_6) \
549 )
551#define ZFOBJECT_ON_INIT_INLINE_8( \
552 ZFMP_0 \
553 , ZFMP_1 \
554 , ZFMP_2 \
555 , ZFMP_3 \
556 , ZFMP_4 \
557 , ZFMP_5 \
558 , ZFMP_6 \
559 , ZFMP_7 \
560 ) \
561 ZFMETHOD_INLINE_DETAIL_8( \
562 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
563 void, objectOnInit \
564 , _ZFP_mP_EXPAND(ZFMP_0) \
565 , _ZFP_mP_EXPAND(ZFMP_1) \
566 , _ZFP_mP_EXPAND(ZFMP_2) \
567 , _ZFP_mP_EXPAND(ZFMP_3) \
568 , _ZFP_mP_EXPAND(ZFMP_4) \
569 , _ZFP_mP_EXPAND(ZFMP_5) \
570 , _ZFP_mP_EXPAND(ZFMP_6) \
571 , _ZFP_mP_EXPAND(ZFMP_7) \
572 )
574#define ZFOBJECT_ON_INIT_DECLARE_8( \
575 ZFMP_0 \
576 , ZFMP_1 \
577 , ZFMP_2 \
578 , ZFMP_3 \
579 , ZFMP_4 \
580 , ZFMP_5 \
581 , ZFMP_6 \
582 , ZFMP_7 \
583 ) \
584 ZFMETHOD_DECLARE_DETAIL_8( \
585 protected, ZFMethodTypeVirtual, \
586 void, objectOnInit \
587 , _ZFP_mP_EXPAND(ZFMP_0) \
588 , _ZFP_mP_EXPAND(ZFMP_1) \
589 , _ZFP_mP_EXPAND(ZFMP_2) \
590 , _ZFP_mP_EXPAND(ZFMP_3) \
591 , _ZFP_mP_EXPAND(ZFMP_4) \
592 , _ZFP_mP_EXPAND(ZFMP_5) \
593 , _ZFP_mP_EXPAND(ZFMP_6) \
594 , _ZFP_mP_EXPAND(ZFMP_7) \
595 )
597#define ZFOBJECT_ON_INIT_DEFINE_8(OwnerClass \
598 , ZFMP_0 \
599 , ZFMP_1 \
600 , ZFMP_2 \
601 , ZFMP_3 \
602 , ZFMP_4 \
603 , ZFMP_5 \
604 , ZFMP_6 \
605 , ZFMP_7 \
606 ) \
607 ZFMETHOD_DEFINE_8(OwnerClass, void, objectOnInit \
608 , _ZFP_mP_EXPAND(ZFMP_0) \
609 , _ZFP_mP_EXPAND(ZFMP_1) \
610 , _ZFP_mP_EXPAND(ZFMP_2) \
611 , _ZFP_mP_EXPAND(ZFMP_3) \
612 , _ZFP_mP_EXPAND(ZFMP_4) \
613 , _ZFP_mP_EXPAND(ZFMP_5) \
614 , _ZFP_mP_EXPAND(ZFMP_6) \
615 , _ZFP_mP_EXPAND(ZFMP_7) \
616 )
617
618// ============================================================
622#define ZFOBJECT_ON_INIT_USER_REGISTER_1(ownerClassSig \
623 , ZFMP_0 \
624 ) \
625 ZFMETHOD_USER_REGISTER_DETAIL_1(ownerClassSig, \
626 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
627 void, objectOnInit \
628 , _ZFP_mP_EXPAND(ZFMP_0) \
629 )
631#define ZFOBJECT_ON_INIT_USER_REGISTER_2(ownerClassSig \
632 , ZFMP_0 \
633 , ZFMP_1 \
634 ) \
635 ZFMETHOD_USER_REGISTER_DETAIL_2(ownerClassSig, \
636 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
637 void, objectOnInit \
638 , _ZFP_mP_EXPAND(ZFMP_0) \
639 , _ZFP_mP_EXPAND(ZFMP_1) \
640 )
642#define ZFOBJECT_ON_INIT_USER_REGISTER_3(ownerClassSig \
643 , ZFMP_0 \
644 , ZFMP_1 \
645 , ZFMP_2 \
646 ) \
647 ZFMETHOD_USER_REGISTER_DETAIL_3(ownerClassSig, \
648 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
649 void, objectOnInit \
650 , _ZFP_mP_EXPAND(ZFMP_0) \
651 , _ZFP_mP_EXPAND(ZFMP_1) \
652 , _ZFP_mP_EXPAND(ZFMP_2) \
653 )
655#define ZFOBJECT_ON_INIT_USER_REGISTER_4(ownerClassSig \
656 , ZFMP_0 \
657 , ZFMP_1 \
658 , ZFMP_2 \
659 , ZFMP_3 \
660 ) \
661 ZFMETHOD_USER_REGISTER_DETAIL_4(ownerClassSig, \
662 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
663 void, objectOnInit \
664 , _ZFP_mP_EXPAND(ZFMP_0) \
665 , _ZFP_mP_EXPAND(ZFMP_1) \
666 , _ZFP_mP_EXPAND(ZFMP_2) \
667 , _ZFP_mP_EXPAND(ZFMP_3) \
668 )
670#define ZFOBJECT_ON_INIT_USER_REGISTER_5(ownerClassSig \
671 , ZFMP_0 \
672 , ZFMP_1 \
673 , ZFMP_2 \
674 , ZFMP_3 \
675 , ZFMP_4 \
676 ) \
677 ZFMETHOD_USER_REGISTER_DETAIL_5(ownerClassSig, \
678 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
679 void, objectOnInit \
680 , _ZFP_mP_EXPAND(ZFMP_0) \
681 , _ZFP_mP_EXPAND(ZFMP_1) \
682 , _ZFP_mP_EXPAND(ZFMP_2) \
683 , _ZFP_mP_EXPAND(ZFMP_3) \
684 , _ZFP_mP_EXPAND(ZFMP_4) \
685 )
687#define ZFOBJECT_ON_INIT_USER_REGISTER_6(ownerClassSig \
688 , ZFMP_0 \
689 , ZFMP_1 \
690 , ZFMP_2 \
691 , ZFMP_3 \
692 , ZFMP_4 \
693 , ZFMP_5 \
694 ) \
695 ZFMETHOD_USER_REGISTER_DETAIL_6(ownerClassSig, \
696 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
697 void, objectOnInit \
698 , _ZFP_mP_EXPAND(ZFMP_0) \
699 , _ZFP_mP_EXPAND(ZFMP_1) \
700 , _ZFP_mP_EXPAND(ZFMP_2) \
701 , _ZFP_mP_EXPAND(ZFMP_3) \
702 , _ZFP_mP_EXPAND(ZFMP_4) \
703 , _ZFP_mP_EXPAND(ZFMP_5) \
704 )
706#define ZFOBJECT_ON_INIT_USER_REGISTER_7(ownerClassSig \
707 , ZFMP_0 \
708 , ZFMP_1 \
709 , ZFMP_2 \
710 , ZFMP_3 \
711 , ZFMP_4 \
712 , ZFMP_5 \
713 , ZFMP_6 \
714 ) \
715 ZFMETHOD_USER_REGISTER_DETAIL_7(ownerClassSig, \
716 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
717 void, objectOnInit \
718 , _ZFP_mP_EXPAND(ZFMP_0) \
719 , _ZFP_mP_EXPAND(ZFMP_1) \
720 , _ZFP_mP_EXPAND(ZFMP_2) \
721 , _ZFP_mP_EXPAND(ZFMP_3) \
722 , _ZFP_mP_EXPAND(ZFMP_4) \
723 , _ZFP_mP_EXPAND(ZFMP_5) \
724 , _ZFP_mP_EXPAND(ZFMP_6) \
725 )
727#define ZFOBJECT_ON_INIT_USER_REGISTER_8(ownerClassSig \
728 , ZFMP_0 \
729 , ZFMP_1 \
730 , ZFMP_2 \
731 , ZFMP_3 \
732 , ZFMP_4 \
733 , ZFMP_5 \
734 , ZFMP_6 \
735 , ZFMP_7 \
736 ) \
737 ZFMETHOD_USER_REGISTER_DETAIL_8(ownerClassSig, \
738 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
739 void, objectOnInit \
740 , _ZFP_mP_EXPAND(ZFMP_0) \
741 , _ZFP_mP_EXPAND(ZFMP_1) \
742 , _ZFP_mP_EXPAND(ZFMP_2) \
743 , _ZFP_mP_EXPAND(ZFMP_3) \
744 , _ZFP_mP_EXPAND(ZFMP_4) \
745 , _ZFP_mP_EXPAND(ZFMP_5) \
746 , _ZFP_mP_EXPAND(ZFMP_6) \
747 , _ZFP_mP_EXPAND(ZFMP_7) \
748 )
749
750// ============================================================
754#define ZFObjectOnInitUserRegister_1(resultMethod, methodInvokerAction, ownerClass \
755 , ZFMP_0 \
756 ) \
757 ZFMethodUserRegisterDetail_1(resultMethod, { \
758 methodInvokerAction \
759 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
760 , _ZFP_mP_EXPAND(ZFMP_0) \
761 )
763#define ZFObjectOnInitUserRegister_2(resultMethod, methodInvokerAction, ownerClass \
764 , ZFMP_0 \
765 , ZFMP_1 \
766 ) \
767 ZFMethodUserRegisterDetail_2(resultMethod, { \
768 methodInvokerAction \
769 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
770 , _ZFP_mP_EXPAND(ZFMP_0) \
771 , _ZFP_mP_EXPAND(ZFMP_1) \
772 )
774#define ZFObjectOnInitUserRegister_3(resultMethod, methodInvokerAction, ownerClass \
775 , ZFMP_0 \
776 , ZFMP_1 \
777 , ZFMP_2 \
778 ) \
779 ZFMethodUserRegisterDetail_3(resultMethod, { \
780 methodInvokerAction \
781 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
782 , _ZFP_mP_EXPAND(ZFMP_0) \
783 , _ZFP_mP_EXPAND(ZFMP_1) \
784 , _ZFP_mP_EXPAND(ZFMP_2) \
785 )
787#define ZFObjectOnInitUserRegister_4(resultMethod, methodInvokerAction, ownerClass \
788 , ZFMP_0 \
789 , ZFMP_1 \
790 , ZFMP_2 \
791 , ZFMP_3 \
792 ) \
793 ZFMethodUserRegisterDetail_4(resultMethod, { \
794 methodInvokerAction \
795 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
796 , _ZFP_mP_EXPAND(ZFMP_0) \
797 , _ZFP_mP_EXPAND(ZFMP_1) \
798 , _ZFP_mP_EXPAND(ZFMP_2) \
799 , _ZFP_mP_EXPAND(ZFMP_3) \
800 )
802#define ZFObjectOnInitUserRegister_5(resultMethod, methodInvokerAction, ownerClass \
803 , ZFMP_0 \
804 , ZFMP_1 \
805 , ZFMP_2 \
806 , ZFMP_3 \
807 , ZFMP_4 \
808 ) \
809 ZFMethodUserRegisterDetail_5(resultMethod, { \
810 methodInvokerAction \
811 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
812 , _ZFP_mP_EXPAND(ZFMP_0) \
813 , _ZFP_mP_EXPAND(ZFMP_1) \
814 , _ZFP_mP_EXPAND(ZFMP_2) \
815 , _ZFP_mP_EXPAND(ZFMP_3) \
816 , _ZFP_mP_EXPAND(ZFMP_4) \
817 )
819#define ZFObjectOnInitUserRegister_6(resultMethod, methodInvokerAction, ownerClass \
820 , ZFMP_0 \
821 , ZFMP_1 \
822 , ZFMP_2 \
823 , ZFMP_3 \
824 , ZFMP_4 \
825 , ZFMP_5 \
826 ) \
827 ZFMethodUserRegisterDetail_6(resultMethod, { \
828 methodInvokerAction \
829 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
830 , _ZFP_mP_EXPAND(ZFMP_0) \
831 , _ZFP_mP_EXPAND(ZFMP_1) \
832 , _ZFP_mP_EXPAND(ZFMP_2) \
833 , _ZFP_mP_EXPAND(ZFMP_3) \
834 , _ZFP_mP_EXPAND(ZFMP_4) \
835 , _ZFP_mP_EXPAND(ZFMP_5) \
836 )
838#define ZFObjectOnInitUserRegister_7(resultMethod, methodInvokerAction, ownerClass \
839 , ZFMP_0 \
840 , ZFMP_1 \
841 , ZFMP_2 \
842 , ZFMP_3 \
843 , ZFMP_4 \
844 , ZFMP_5 \
845 , ZFMP_6 \
846 ) \
847 ZFMethodUserRegisterDetail_7(resultMethod, { \
848 methodInvokerAction \
849 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
850 , _ZFP_mP_EXPAND(ZFMP_0) \
851 , _ZFP_mP_EXPAND(ZFMP_1) \
852 , _ZFP_mP_EXPAND(ZFMP_2) \
853 , _ZFP_mP_EXPAND(ZFMP_3) \
854 , _ZFP_mP_EXPAND(ZFMP_4) \
855 , _ZFP_mP_EXPAND(ZFMP_5) \
856 , _ZFP_mP_EXPAND(ZFMP_6) \
857 )
859#define ZFObjectOnInitUserRegister_8(resultMethod, methodInvokerAction, ownerClass \
860 , ZFMP_0 \
861 , ZFMP_1 \
862 , ZFMP_2 \
863 , ZFMP_3 \
864 , ZFMP_4 \
865 , ZFMP_5 \
866 , ZFMP_6 \
867 , ZFMP_7 \
868 ) \
869 ZFMethodUserRegisterDetail_8(resultMethod, { \
870 methodInvokerAction \
871 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
872 , _ZFP_mP_EXPAND(ZFMP_0) \
873 , _ZFP_mP_EXPAND(ZFMP_1) \
874 , _ZFP_mP_EXPAND(ZFMP_2) \
875 , _ZFP_mP_EXPAND(ZFMP_3) \
876 , _ZFP_mP_EXPAND(ZFMP_4) \
877 , _ZFP_mP_EXPAND(ZFMP_5) \
878 , _ZFP_mP_EXPAND(ZFMP_6) \
879 , _ZFP_mP_EXPAND(ZFMP_7) \
880 )
881
882// ============================================================
890 ZF_IN const ZFClass *cls
891 , ZF_IN const ZFMP &methodParam
892 , ZF_IN const ZFListener &methodImpl
893 , ZF_OUT_OPT zfstring *errorHint = zfnull
894 );
899 ZF_IN const ZFClass *cls
901 , ZF_OUT_OPT zfstring *errorHint = zfnull
902 );
903
905#endif // #ifndef _ZFI_ZFObjectDeclare_h_
906
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#define ZF_OUT_OPT
dummy macro that shows the param used as optional output
Definition ZFCoreTypeDef_ClassType.h:208
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:196
#define zfclassNotPOD
shows the class is not a POD type, you should not memset it or declare it in stack or copy value by c...
Definition ZFCoreTypeDef_ClassType.h:48
#define zfclassFwd
forward declaration of a class type
Definition ZFCoreTypeDef_ClassType.h:31
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
zft_zfstring< zfchar > zfstring
see zft_zfstring
Definition ZFCoreTypeDef_StringType.h:15
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
const ZFMethod * ZFObjectOnInitDynamicRegister(const ZFClass *cls, const ZFMP &methodParam, const ZFListener &methodImpl, zfstring *errorHint=zft_zfnull)
util to declare ZFObject::objectOnInit as ZFMethodDynamicRegister
ZFObject's class info.
Definition ZFClass.h:63
listener as ZFCallback, mostly used by ZFObject::observerNotify
Definition ZFObjectObserver.h:30
util for ZFDynamic::method
Definition ZFMethodDynamicRegister.h:203
param for ZFMethodDynamicRegister
Definition ZFMethodDynamicRegister.h:102
reflectable method for ZFObject
Definition ZFMethod.h:252
util class to cast ZFObject types freely