6#ifndef _ZFI_ZFPropertyDeclare_h_
7#define _ZFI_ZFPropertyDeclare_h_
19#define ZFPropertyAccess(OwnerClass, Name) ((const ZFProperty *)OwnerClass::_ZFP_Prop_##Name())
31#define ZFPropertyNoInitValue
32#define _ZFP_PropInitV(...) __VA_ARGS__
103#define ZFPROPERTY_RETAIN(Type, Name, ...) \
104 ZFPROPERTY_RETAIN_DETAIL( \
105 Type, Name, _ZFP_PropInitV(__VA_ARGS__), \
109#define ZFPROPERTY_RETAIN_READONLY(Type, Name, InitValueOrEmpty) \
110 ZFPROPERTY_RETAIN_DETAIL( \
111 Type, Name, InitValueOrEmpty, \
115#define ZFPROPERTY_RETAIN_DETAIL( \
116 Type, Name, InitValueOrEmpty, \
117 SetterAccessType, GetterAccessType) \
118 _ZFP_ZFPROPERTY_GETTER_RETAIN(GetterAccessType, Type, Name) \
120 _ZFP_ZFPROPERTY_SETTER_RETAIN(SetterAccessType, Type, Name) \
121 _ZFP_ZFPROPERTY_DECLARE_RETAIN(Type, zftTraits<Type>::TrType::ClassData()->classNameFull(), Name, \
127#define ZFPROPERTY_ASSIGN(Type, Name, ...) \
128 ZFPROPERTY_ASSIGN_DETAIL( \
129 Type, Name, _ZFP_PropInitV(__VA_ARGS__), \
133#define ZFPROPERTY_ASSIGN_READONLY(Type, Name, InitValueOrEmpty) \
134 ZFPROPERTY_ASSIGN_DETAIL( \
135 Type, Name, InitValueOrEmpty, \
139#define ZFPROPERTY_ASSIGN_DETAIL( \
140 Type, Name, InitValueOrEmpty, \
141 SetterAccessType, GetterAccessType) \
142 _ZFP_ZFPROPERTY_GETTER_ASSIGN(GetterAccessType, Type, Name) \
144 _ZFP_ZFPROPERTY_SETTER_ASSIGN(SetterAccessType, Type, Name) \
145 _ZFP_ZFPROPERTY_DECLARE_ASSIGN(Type, ZFTypeId<zftTraits<Type>::TrNoRef>::TypeId(), Name, \
207#define ZFPROPERTY_ON_INIT_DECLARE(Type, Name) \
209 static zfbool _ZFP_propLExt_##Name(void) {return zftrue;} \
210 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnInit, ZFM_EMPTY)
212#define ZFPROPERTY_ON_INIT_DECLARE_NO_AUTO_INIT(Type, Name) \
214 static zfbool _ZFP_propLExt_##Name(void) {return zffalse;} \
215 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnInit, ZFM_EMPTY)
217#define ZFPROPERTY_ON_INIT_DEFINE(OwnerClass, Type, Name) \
218 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnInit, ZFM_EMPTY, ZFM_EXPAND( \
219 OwnerClass::ClassData()->_ZFP_ZFClass_propertyAutoInitRegister(OwnerClass::_ZFP_Prop_##Name()); \
220 if(OwnerClass::_ZFP_propLExt_##Name()) { \
221 OwnerClass::ClassData()->_ZFP_ZFClass_propertyInitStepRegister(OwnerClass::_ZFP_Prop_##Name()); \
225#define ZFPROPERTY_ON_INIT_INLINE(Type, Name) \
226 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnInit, ZFM_EMPTY, ZFM_EXPAND( \
227 zfself::ClassData()->_ZFP_ZFClass_propertyAutoInitRegister(zfself::_ZFP_Prop_##Name()); \
228 zfself::ClassData()->_ZFP_ZFClass_propertyInitStepRegister(zfself::_ZFP_Prop_##Name()); \
231#define ZFPROPERTY_ON_INIT_INLINE_NO_AUTO_INIT(Type, Name) \
232 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnInit, ZFM_EMPTY, ZFM_EXPAND( \
233 zfself::ClassData()->_ZFP_ZFClass_propertyInitStepRegister(zfself::_ZFP_Prop_##Name()); \
237#define ZFPROPERTY_ON_UPDATE_DECLARE(Type, Name) \
238 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnUpdate, ZFM_EMPTY)
240#define ZFPROPERTY_ON_UPDATE_DEFINE(OwnerClass, Type, Name) \
241 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnUpdate, ZFM_EMPTY, ZFM_EMPTY())
243#define ZFPROPERTY_ON_UPDATE_INLINE(Type, Name) \
244 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnUpdate, ZFM_EMPTY, ZFM_EMPTY())
247#define ZFPROPERTY_ON_ATTACH_DECLARE(Type, Name) \
248 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnAttach, ZFM_EXPAND)
250#define ZFPROPERTY_ON_ATTACH_DEFINE(OwnerClass, Type, Name) \
251 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnAttach, ZFM_EXPAND, ZFM_EMPTY())
253#define ZFPROPERTY_ON_ATTACH_INLINE(Type, Name) \
254 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnAttach, ZFM_EXPAND, ZFM_EMPTY())
257#define ZFPROPERTY_ON_DETACH_DECLARE(Type, Name) \
258 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnDetach, ZFM_EXPAND)
260#define ZFPROPERTY_ON_DETACH_DEFINE(OwnerClass, Type, Name) \
261 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnDetach, ZFM_EXPAND, ZFM_EMPTY())
263#define ZFPROPERTY_ON_DETACH_INLINE(Type, Name) \
264 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnDetach, ZFM_EXPAND, ZFM_EMPTY())
267template<
typename T_ZFObject>
271 T_ZFObject old = this->_value;
275 T_ZFObject &value(
void) {
283 template<
typename T_ZFObject2>
284 _ZFP_PropRVH(
ZF_IN T_ZFObject2 obj)
288 ~_ZFP_PropRVH(
void) {
294template<
typename T_Type>
298 ZF_IN void *rawValueStoreToken
301 ((_ZFP_PropRVH<T_Type> *)rawValueStoreToken)->value(value);
304template<
typename T_Type>
308 ZF_IN void *rawValueStoreToken
309 ,
ZF_IN const void *value
311 *(T_Type *)rawValueStoreToken = *(T_Type *)value;
312 return rawValueStoreToken;
316template<
typename T_Type,
int isZFObject = zftIsZFObject(
typename zftTraits<T_Type>::TrType)>
323template<
typename T_Type>
337template<
typename T_Type>
345#define _ZFP_ZFPROPERTY_DECLARE_REGISTER_RETAIN(Type, ZFTypeId_noneOrType, Name, \
346 propertyClassOfRetainProperty) \
348 static ZFProperty *_ZFP_Prop_##Name(void) { \
349 static _ZFP_ZFPropertyRegisterHolder _propertyInfoHolder(zffalse \
352 , zfself::ClassData() \
355 , ZFTypeId_noneOrType \
356 , ZFMethodAccessDetail_1(zfself, Name \
357 , ZFMP_IN(Type const &, propertyValue) \
359 , ZFMethodAccessDetail_0(zfself, Name) \
360 , propertyClassOfRetainProperty \
361 , zfself::_ZFP_propCbAccessed_##Name \
362 , zfself::_ZFP_propCbIsInit_##Name \
363 , zfself::_ZFP_propCbReset_##Name \
366 , zfself::_ZFP_propCbEnsureInit_##Name \
367 , zfself::_ZFP_propCbDel_##Name \
369 return _propertyInfoHolder.propertyInfo; \
371#define _ZFP_ZFPROPERTY_DECLARE_REGISTER_ASSIGN(Type, ZFTypeId_noneOrType, Name, \
372 propertyClassOfRetainProperty) \
374 static ZFProperty *_ZFP_Prop_##Name(void) { \
375 static _ZFP_ZFPropertyRegisterHolder _propertyInfoHolder(zffalse \
378 , zfself::ClassData() \
381 , ZFTypeId_noneOrType \
382 , ZFMethodAccessDetail_1(zfself, Name \
383 , ZFMP_IN(Type const &, propertyValue) \
385 , ZFMethodAccessDetail_0(zfself, Name) \
386 , propertyClassOfRetainProperty \
387 , zfself::_ZFP_propCbAccessed_##Name \
388 , zfself::_ZFP_propCbIsInit_##Name \
389 , zfself::_ZFP_propCbReset_##Name \
392 , zfself::_ZFP_propCbEnsureInit_##Name \
393 , zfself::_ZFP_propCbDel_##Name \
395 return _propertyInfoHolder.propertyInfo; \
398#define _ZFP_ZFPROPERTY_VALUE_DECLARE_RETAIN(Type, ZFTypeId_noneOrType, Name, \
402 typedef Type _ZFP_PropVT_##Name; \
403 typedef zfauto _ZFP_PropHT_##Name; \
406 zffinal zfclassNotPOD _ZFP_PropV_##Name { \
408 _ZFP_PropV_##Name(void) \
411 zfself::_ZFP_Prop_##Name(); \
413 ~_ZFP_PropV_##Name(void) { \
414 zfpoolDelete(this->_ZFP_v); \
417 zfself::_ZFP_PropVT_##Name &_ZFP_init( \
418 ZF_IN ZFObject *owner \
419 , ZF_IN zfbool notifyOwnerAttach \
421 if(!(this->_ZFP_v)) { \
422 this->_ZFP_v = zfpoolNew(_ZFP_PropRVH<zfself::_ZFP_PropVT_##Name>, InitValueOrEmpty); \
423 _ZFP_ZFPropertyLifeCycleCall_init_retain( \
424 zfself::_ZFP_Prop_##Name(), \
426 zfcast(ZFObject *, this->_ZFP_v->value()), \
428 _ZFP_PropRVSC_r<zfself::_ZFP_PropVT_##Name>::f, \
431 return this->_ZFP_v->value(); \
433 inline zfbool _ZFP_accessed(void) const { \
434 return (this->_ZFP_v != zfnull); \
437 ZF_IN ZFObject *owner \
438 , ZF_IN zfbool notifyOwnerDetach \
440 _ZFP_ZFPropertyLifeCycleCall_dealloc_retain( \
441 zfself::_ZFP_Prop_##Name(), \
443 zfcast(ZFObject *, this->_ZFP_v->value()), \
444 notifyOwnerDetach); \
445 zfpoolDelete(this->_ZFP_v); \
446 this->_ZFP_v = zfnull; \
449 _ZFP_PropRVH<zfself::_ZFP_PropVT_##Name> *_ZFP_v; \
451 zfself::_ZFP_PropV_##Name Name##_PropV; \
453 static zfbool _ZFP_propCbIsInit_##Name( \
454 ZF_IN const ZFProperty *property \
455 , ZF_IN zfany const &ownerObj \
456 , ZF_OUT_OPT zfauto *outInitValue \
458 zfself *t = zfcast(zfself *, ownerObj); \
459 if(t->Name##_PropV._ZFP_accessed()) { \
460 zfself::_ZFP_PropV_##Name _holder; \
461 if(outInitValue != zfnull) { \
462 *outInitValue = _holder._ZFP_init(ownerObj, zffalse); \
464 zfbool ret = (ZFObjectCompareValue( \
465 t->Name(), _holder._ZFP_init(ownerObj, zffalse)) \
466 == ZFCompareEqual); \
467 _holder._ZFP_dealloc(ownerObj, zffalse); \
475#define _ZFP_ZFPROPERTY_VALUE_DECLARE_ASSIGN(Type, ZFTypeId_noneOrType, Name, \
479 typedef Type _ZFP_PropVT_##Name; \
480 typedef Type _ZFP_PropHT_##Name; \
483 zffinal zfclassNotPOD _ZFP_PropV_##Name { \
485 _ZFP_PropV_##Name(void) \
488 zfself::_ZFP_Prop_##Name(); \
490 ~_ZFP_PropV_##Name(void) { \
491 zfpoolDelete(this->_ZFP_v); \
494 zfself::_ZFP_PropVT_##Name &_ZFP_init( \
495 ZF_IN ZFObject *owner \
496 , ZF_IN zfbool notifyOwnerAttach \
498 if(!(this->_ZFP_v)) { \
499 this->_ZFP_v = zfpoolNew(zfself::_ZFP_PropVT_##Name, InitValueOrEmpty); \
500 _ZFP_ZFPropertyLifeCycleCall_init_assign( \
501 zfself::_ZFP_Prop_##Name(), \
505 _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(*(this->_ZFP_v))); \
507 return (*(this->_ZFP_v)); \
509 inline zfbool _ZFP_accessed(void) const { \
510 return (this->_ZFP_v != zfnull); \
513 ZF_IN ZFObject *owner \
514 , ZF_IN zfbool notifyOwnerDetach \
516 _ZFP_ZFPropertyLifeCycleCall_dealloc_assign( \
517 zfself::_ZFP_Prop_##Name(), \
521 _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(*(this->_ZFP_v))); \
522 zfpoolDelete(this->_ZFP_v); \
523 this->_ZFP_v = zfnull; \
526 zfself::_ZFP_PropVT_##Name *_ZFP_v; \
528 zfself::_ZFP_PropV_##Name Name##_PropV; \
530 static zfbool _ZFP_propCbIsInit_##Name( \
531 ZF_IN const ZFProperty *property \
532 , ZF_IN zfany const &ownerObj \
533 , ZF_OUT_OPT zfauto *outInitValue \
535 zfself *t = zfcast(zfself *, ownerObj); \
536 if(t->Name##_PropV._ZFP_accessed()) { \
537 zfself::_ZFP_PropV_##Name _holder; \
538 if(outInitValue != zfnull) { \
539 ZFTypeId<zfself::_ZFP_PropVT_##Name>::ValueStore(*outInitValue, _holder._ZFP_init(ownerObj, zffalse)); \
541 zfbool ret = (ZFComparerDefault( \
542 t->Name(), _holder._ZFP_init(ownerObj, zffalse)) \
543 == ZFCompareEqual); \
544 _holder._ZFP_dealloc(ownerObj, zffalse); \
554#define _ZFP_ZFPROPERTY_DECLARE_CALLBACK(Type, Name) \
556 static zfbool _ZFP_propCbAccessed_##Name( \
557 ZF_IN const ZFProperty *property \
558 , ZF_IN zfany const &ownerObj \
560 return zfcast(zfself *, ownerObj)->Name##_PropV._ZFP_accessed(); \
562 static void _ZFP_propCbReset_##Name( \
563 ZF_IN const ZFProperty *property \
564 , ZF_IN zfany const &owner \
566 if(_ZFP_propCbAccessed_##Name(property, owner)) { \
567 owner->_ZFP_ZFObject_objectPropertyValueOnReset(zfself::_ZFP_Prop_##Name()); \
569 zfcast(zfself *, owner)->Name##_PropV._ZFP_dealloc(owner, zftrue); \
571 static void _ZFP_propCbEnsureInit_##Name( \
572 ZF_IN const ZFProperty *property \
573 , ZF_IN zfany const &owner \
575 zfcast(zfself *, owner)->Name##_PropV._ZFP_init(owner, zftrue); \
577 static void _ZFP_propCbDel_##Name( \
578 ZF_IN const ZFProperty *property \
579 , ZF_IN zfany const &owner \
581 zfcast(zfself *, owner)->Name##_PropV._ZFP_dealloc(owner, zffalse); \
586#define _ZFP_ZFPROPERTY_DECLARE_RETAIN(Type, ZFTypeId_noneOrType, Name, \
588 _ZFP_ZFPROPERTY_DECLARE_REGISTER_RETAIN(Type, ZFTypeId_noneOrType, Name, \
589 zftTraits<Type>::TrType::ClassData()) \
590 _ZFP_ZFPROPERTY_VALUE_DECLARE_RETAIN(Type, ZFTypeId_noneOrType, Name, \
592 _ZFP_ZFPROPERTY_DECLARE_CALLBACK(Type, Name)
593#define _ZFP_ZFPROPERTY_DECLARE_ASSIGN(Type, ZFTypeId_noneOrType, Name, \
595 _ZFP_ZFPROPERTY_DECLARE_REGISTER_ASSIGN(Type, ZFTypeId_noneOrType, Name, \
597 _ZFP_ZFPROPERTY_VALUE_DECLARE_ASSIGN(Type, ZFTypeId_noneOrType, Name, \
599 _ZFP_ZFPROPERTY_DECLARE_CALLBACK(Type, Name)
602#define _ZFP_ZFPROPERTY_SETTER_RETAIN(AccessType, Type, Name) \
604 _ZFP_ZFMETHOD_INLINE( \
606 , AccessType, ZFMethodTypeVirtual, S \
608 , _ZFP_mP_EXPAND(ZFMP_IN(Type const &, propertyValue)) \
609 , _ZFP_ZFMP_DUMMY() \
610 , _ZFP_ZFMP_DUMMY() \
611 , _ZFP_ZFMP_DUMMY() \
612 , _ZFP_ZFMP_DUMMY() \
613 , _ZFP_ZFMP_DUMMY() \
614 , _ZFP_ZFMP_DUMMY() \
615 , _ZFP_ZFMP_DUMMY() \
617 ZFObjectLock(this); \
618 zfbool accessed = Name##_PropV._ZFP_accessed(); \
619 ZFObject *valueOld = zfcast(ZFObject *, Name##_PropV._ZFP_init(this->toObject(), zffalse)); \
620 _ZFP_ZFPropertyLifeCycleCall_setter_retain( \
621 zfself::_ZFP_Prop_##Name(), \
625 zfcast(ZFObject *, propertyValue), \
626 _ZFP_PropRVSC_r<zfself::_ZFP_PropVT_##Name>::f, \
627 Name##_PropV._ZFP_v); \
628 ZFObjectUnlock(this); \
631#define _ZFP_ZFPROPERTY_SETTER_ASSIGN(AccessType, Type, Name) \
633 _ZFP_ZFMETHOD_INLINE( \
635 , AccessType, ZFMethodTypeVirtual, S \
637 , _ZFP_mP_EXPAND(ZFMP_IN(Type const &, propertyValue)) \
638 , _ZFP_ZFMP_DUMMY() \
639 , _ZFP_ZFMP_DUMMY() \
640 , _ZFP_ZFMP_DUMMY() \
641 , _ZFP_ZFMP_DUMMY() \
642 , _ZFP_ZFMP_DUMMY() \
643 , _ZFP_ZFMP_DUMMY() \
644 , _ZFP_ZFMP_DUMMY() \
646 ZFObjectLock(this); \
647 zfbool accessed = Name##_PropV._ZFP_accessed(); \
648 Type valueOld = Name##_PropV._ZFP_init(this->toObject(), zffalse); \
649 _ZFP_ZFPropertyLifeCycleCall_setter_assign( \
650 zfself::_ZFP_Prop_##Name(), \
655 _ZFP_PropRVSC_a<zfself::_ZFP_PropVT_##Name>::f, \
656 Name##_PropV._ZFP_v, \
657 _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(valueOld), \
658 _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(propertyValue)); \
659 ZFObjectUnlock(this); \
662#define _ZFP_ZFPROPERTY_GETTER_RETAIN(AccessType, Type, Name) \
664 _ZFP_ZFMETHOD_INLINE( \
666 , AccessType, ZFMethodTypeVirtual, G \
667 , Type const &, Name \
668 , _ZFP_ZFMP_DUMMY() \
669 , _ZFP_ZFMP_DUMMY() \
670 , _ZFP_ZFMP_DUMMY() \
671 , _ZFP_ZFMP_DUMMY() \
672 , _ZFP_ZFMP_DUMMY() \
673 , _ZFP_ZFMP_DUMMY() \
674 , _ZFP_ZFMP_DUMMY() \
675 , _ZFP_ZFMP_DUMMY() \
677 ZFObjectLocker(this); \
678 return Name##_PropV._ZFP_init(this->toObject(), zftrue); \
681#define _ZFP_ZFPROPERTY_GETTER_ASSIGN(AccessType, Type, Name) \
683 _ZFP_ZFMETHOD_INLINE( \
685 , AccessType, ZFMethodTypeVirtual, G \
688 , _ZFP_ZFMP_DUMMY() \
689 , _ZFP_ZFMP_DUMMY() \
690 , _ZFP_ZFMP_DUMMY() \
691 , _ZFP_ZFMP_DUMMY() \
692 , _ZFP_ZFMP_DUMMY() \
693 , _ZFP_ZFMP_DUMMY() \
694 , _ZFP_ZFMP_DUMMY() \
695 , _ZFP_ZFMP_DUMMY() \
697 ZFObjectLocker(this); \
698 return Name##_PropV._ZFP_init(this->toObject(), zftrue); \
703#define _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, lifeCycleName, constFix, extraRegStep) \
705 zfclassNotPOD _ZFP_propLReg_##lifeCycleName##_##Name { \
707 _ZFP_propLReg_##lifeCycleName##_##Name(void) { \
708 static zfbool needInit = zftrue; \
710 needInit = zffalse; \
711 _ZFP_ZFPropertyLifeCycleRegister( \
712 zftext(#lifeCycleName), \
713 zfself::_ZFP_Prop_##Name(), \
714 zfself::ClassData(), \
715 zfself::_ZFP_propLI_##lifeCycleName##_##Name); \
720 _ZFP_propLReg_##lifeCycleName##_##Name _ZFP_propLReg_##lifeCycleName##_##Name; \
721 static void _ZFP_propLI_##lifeCycleName##_##Name( \
722 ZF_IN ZFObject *propertyOwnerObject \
723 , ZF_IN const ZFProperty *property \
724 , ZF_IN void *propertyValue \
725 , ZF_IN const void *propertyValueOld \
726 , ZF_IN ZFObject *propertyLifeCycleUserData \
728 zfcast(zfself *, propertyOwnerObject)->zfself::_ZFP_propL_##lifeCycleName##_##Name( \
729 *(constFix(const) zfself::_ZFP_PropHT_##Name *)propertyValue, \
730 *(zfself::_ZFP_PropHT_##Name *)propertyValueOld); \
733 zffinal void _ZFP_propL_##lifeCycleName##_##Name( \
734 ZF_IN zfself::_ZFP_PropHT_##Name constFix(const) &propertyValue, \
735 ZF_IN zfself::_ZFP_PropHT_##Name const &propertyValueOld)
736#define _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, lifeCycleName, constFix) \
738 zffinal void _ZFP_propL_##lifeCycleName##_##Name( \
739 ZF_IN zfself::_ZFP_PropHT_##Name constFix(const) &propertyValue, \
740 ZF_IN zfself::_ZFP_PropHT_##Name const &propertyValueOld);
741#define _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, lifeCycleName, constFix, extraRegStep) \
742 ZF_STATIC_REGISTER_INIT(propL_##OwnerClass##_##lifeCycleName##_##Name) { \
743 _ZFP_ZFPropertyLifeCycleRegister( \
744 zftext(#lifeCycleName), \
745 OwnerClass::_ZFP_Prop_##Name(), \
746 OwnerClass::ClassData(), \
752 ZF_IN ZFObject *propertyOwnerObject \
753 , ZF_IN const ZFProperty *property \
754 , ZF_IN void *propertyValue \
755 , ZF_IN const void *propertyValueOld \
756 , ZF_IN ZFObject *propertyLifeCycleUserData \
758 zfcast(OwnerClass *, propertyOwnerObject)->OwnerClass::_ZFP_propL_##lifeCycleName##_##Name( \
759 *(constFix(const) OwnerClass::_ZFP_PropHT_##Name *)propertyValue, \
760 *(OwnerClass::_ZFP_PropHT_##Name *)propertyValueOld); \
762 ZF_STATIC_REGISTER_END(propL_##OwnerClass##_##lifeCycleName##_##Name) \
763 void OwnerClass::_ZFP_propL_##lifeCycleName##_##Name( \
764 ZF_IN zfself::_ZFP_PropHT_##Name constFix(const) &propertyValue, \
765 ZF_IN zfself::_ZFP_PropHT_##Name const &propertyValueOld)
767extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleRegister(
771 ,
ZF_IN _ZFP_PropLifeCycleWrapper propertyLifeCycleWrapper
773extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleUnregister(
778extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_init_retain(
783 ,
ZF_IN void (*rawValueStoreCallback)(
784 ZF_IN void *rawValueStoreToken
787 ,
ZF_IN void *rawValueStoreToken
789extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_init_assign(
796extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_dealloc_retain(
802extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_dealloc_assign(
809extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_setter_retain(
815 ,
ZF_IN void (*rawValueStoreCallback)(
816 ZF_IN void *rawValueStoreToken
819 ,
ZF_IN void *rawValueStoreToken
821extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_setter_assign(
825 ,
ZF_IN void *propertyValueOld
826 ,
ZF_IN const void *propertyValueNew
827 ,
ZF_IN void *(*rawValueStoreCallback)(
828 ZF_IN void *rawValueStoreToken
829 ,
ZF_IN const void *value
831 ,
ZF_IN void *rawValueStoreToken
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
_ZFT_t_zfchar zfchar
char wrapper
Definition ZFCoreTypeDef_CharType.h:17
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:184
#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
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
#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
#define zfunsafe_zfobjRelease(obj)
no lock version of zfobjRelease, use with caution
Definition ZFObjectRetain.h:151
#define zfunsafe_zfobjRetain(obj)
no lock version of zfobjRetain, use with caution
Definition ZFObjectRetain.h:131
const ZFProperty * ZFPropertyForName(const zfstring &classNameOrFullName, const zfstring &propertyName)
get property by name, or null if not registered
ZFObject's class info.
Definition ZFClass.h:66
base class of all objects
Definition ZFObjectCore.h:196
info for a property for ZFObject, see ZFPROPERTY_RETAIN for more info
Definition ZFProperty.h:27
util method to cast ZFObject types freely
Definition zfany.h:35
see zfany
Definition zfany.h:113
#define zfcast(T_To, obj)
safely cast ZFObject types, return null if not desired type
Definition zfcast.h:24