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(Type, Name, _ZFP_PropInitV(__VA_ARGS__), public, public)
107#define ZFPROPERTY_RETAIN_READONLY(Type, Name, InitValueOrEmpty) \
108 ZFPROPERTY_RETAIN_DETAIL(Type, Name, InitValueOrEmpty, protected, public)
111#define ZFPROPERTY_RETAIN_DETAIL(Type, Name, InitValueOrEmpty, SetterAccessType, GetterAccessType) \
112 _ZFP_ZFPROPERTY_GETTER_RETAIN(GetterAccessType, Type, Name) \
114 _ZFP_ZFPROPERTY_SETTER_RETAIN(SetterAccessType, Type, Name) \
115 _ZFP_ZFPROPERTY_DECLARE_RETAIN(Type, zftTraits<Type>::TrType::ClassData()->classNameFull(), Name, InitValueOrEmpty) \
120#define ZFPROPERTY_ASSIGN(Type, Name, ...) \
121 ZFPROPERTY_ASSIGN_DETAIL(Type, Name, _ZFP_PropInitV(__VA_ARGS__), public, public)
124#define ZFPROPERTY_ASSIGN_READONLY(Type, Name, InitValueOrEmpty) \
125 ZFPROPERTY_ASSIGN_DETAIL(Type, Name, InitValueOrEmpty, protected, public)
128#define ZFPROPERTY_ASSIGN_DETAIL(Type, Name, InitValueOrEmpty, SetterAccessType, GetterAccessType) \
129 _ZFP_ZFPROPERTY_GETTER_ASSIGN(GetterAccessType, Type, Name) \
131 _ZFP_ZFPROPERTY_SETTER_ASSIGN(SetterAccessType, Type, Name) \
132 _ZFP_ZFPROPERTY_DECLARE_ASSIGN(Type, ZFTypeId<zftTraits<Type>::TrNoRef>::TypeId(), Name, InitValueOrEmpty) \
193#define ZFPROPERTY_ON_INIT_DECLARE(Type, Name) \
195 static zfbool _ZFP_propLExt_##Name(void) {return zftrue;} \
196 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnInit, ZFM_EMPTY)
198#define ZFPROPERTY_ON_INIT_DECLARE_NO_AUTO_INIT(Type, Name) \
200 static zfbool _ZFP_propLExt_##Name(void) {return zffalse;} \
201 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnInit, ZFM_EMPTY)
203#define ZFPROPERTY_ON_INIT_DEFINE(OwnerClass, Type, Name) \
204 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnInit, ZFM_EMPTY, ZFM_EXPAND( \
205 OwnerClass::ClassData()->_ZFP_ZFClass_propertyAutoInitRegister(OwnerClass::_ZFP_Prop_##Name()); \
206 if(OwnerClass::_ZFP_propLExt_##Name()) { \
207 OwnerClass::ClassData()->_ZFP_ZFClass_propertyInitStepRegister(OwnerClass::_ZFP_Prop_##Name()); \
211#define ZFPROPERTY_ON_INIT_INLINE(Type, Name) \
212 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnInit, ZFM_EMPTY, ZFM_EXPAND( \
213 zfself::ClassData()->_ZFP_ZFClass_propertyAutoInitRegister(zfself::_ZFP_Prop_##Name()); \
214 zfself::ClassData()->_ZFP_ZFClass_propertyInitStepRegister(zfself::_ZFP_Prop_##Name()); \
217#define ZFPROPERTY_ON_INIT_INLINE_NO_AUTO_INIT(Type, Name) \
218 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnInit, ZFM_EMPTY, ZFM_EXPAND( \
219 zfself::ClassData()->_ZFP_ZFClass_propertyInitStepRegister(zfself::_ZFP_Prop_##Name()); \
223#define ZFPROPERTY_ON_UPDATE_DECLARE(Type, Name) \
224 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnUpdate, ZFM_EMPTY)
226#define ZFPROPERTY_ON_UPDATE_DEFINE(OwnerClass, Type, Name) \
227 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnUpdate, ZFM_EMPTY, ZFM_EMPTY())
229#define ZFPROPERTY_ON_UPDATE_INLINE(Type, Name) \
230 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnUpdate, ZFM_EMPTY, ZFM_EMPTY())
233#define ZFPROPERTY_ON_ATTACH_DECLARE(Type, Name) \
234 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnAttach, ZFM_EXPAND)
236#define ZFPROPERTY_ON_ATTACH_DEFINE(OwnerClass, Type, Name) \
237 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnAttach, ZFM_EXPAND, ZFM_EMPTY())
239#define ZFPROPERTY_ON_ATTACH_INLINE(Type, Name) \
240 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnAttach, ZFM_EXPAND, ZFM_EMPTY())
243#define ZFPROPERTY_ON_DETACH_DECLARE(Type, Name) \
244 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, OnDetach, ZFM_EXPAND)
246#define ZFPROPERTY_ON_DETACH_DEFINE(OwnerClass, Type, Name) \
247 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, OnDetach, ZFM_EXPAND, ZFM_EMPTY())
249#define ZFPROPERTY_ON_DETACH_INLINE(Type, Name) \
250 _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, OnDetach, ZFM_EXPAND, ZFM_EMPTY())
253#define _ZFP_PropInvalid ((zfuint)0xdeadc0de)
255template<
typename T_Type>
262 ((_ZFP_PropRVH<T_Type> *)rawValueStoreToken)->Set(value);
272 T_Type old = this->Get();
281 return (T_Type &)_ZFP_v.v;
285 _ZFP_v.a = _ZFP_PropInvalid;
288 return (_ZFP_v.a != _ZFP_PropInvalid);
293 _ZFP_v.a = _ZFP_PropInvalid;
295 ~_ZFP_PropRVH(
void) {
307template<
typename T_Type>
312 ,
ZF_IN const void *value
314 _ZFP_PropAVH<T_Type> *t = (_ZFP_PropAVH<T_Type> *)rawValueStoreToken;
315 t->Set(*(
const T_Type *)value);
324 void Set(
ZF_IN const T_Type &value) {
333 return (T_Type &)_ZFP_v.v;
337 _ZFP_v.a = _ZFP_PropInvalid;
340 return (_ZFP_v.a != _ZFP_PropInvalid);
345 _ZFP_v.a = _ZFP_PropInvalid;
347 ~_ZFP_PropAVH(
void) {
359template<
typename T_Type,
int isZFObject = zftIsZFObject(
typename zftTraits<T_Type>::TrType)>
366template<
typename T_Type>
380template<
typename T_Type>
388#define _ZFP_ZFPROPERTY_DECLARE_REGISTER_RETAIN(Type, ZFTypeId_noneOrType, Name, propertyClassOfRetainProperty) \
390 static ZFProperty *_ZFP_Prop_##Name(void) { \
391 static _ZFP_ZFPropertyRegisterHolder _propertyInfoHolder(zffalse \
394 , zfself::ClassData() \
397 , ZFTypeId_noneOrType \
398 , ZFMethodAccessDetail_1(zfself, Name \
399 , ZFMP_IN(Type const &, propertyValue) \
401 , ZFMethodAccessDetail_0(zfself, Name) \
402 , propertyClassOfRetainProperty \
403 , zfself::_ZFP_propCbAccessed_##Name \
404 , zfself::_ZFP_propCbIsInit_##Name \
405 , zfself::_ZFP_propCbReset_##Name \
408 , zfself::_ZFP_propCbEnsureInit_##Name \
409 , zfself::_ZFP_propCbDel_##Name \
411 return _propertyInfoHolder.propertyInfo; \
413#define _ZFP_ZFPROPERTY_DECLARE_REGISTER_ASSIGN(Type, ZFTypeId_noneOrType, Name, propertyClassOfRetainProperty) \
415 static ZFProperty *_ZFP_Prop_##Name(void) { \
416 static _ZFP_ZFPropertyRegisterHolder _propertyInfoHolder(zffalse \
419 , zfself::ClassData() \
422 , ZFTypeId_noneOrType \
423 , ZFMethodAccessDetail_1(zfself, Name \
424 , ZFMP_IN(Type const &, propertyValue) \
426 , ZFMethodAccessDetail_0(zfself, Name) \
427 , propertyClassOfRetainProperty \
428 , zfself::_ZFP_propCbAccessed_##Name \
429 , zfself::_ZFP_propCbIsInit_##Name \
430 , zfself::_ZFP_propCbReset_##Name \
433 , zfself::_ZFP_propCbEnsureInit_##Name \
434 , zfself::_ZFP_propCbDel_##Name \
436 return _propertyInfoHolder.propertyInfo; \
439#define _ZFP_ZFPROPERTY_VALUE_DECLARE_RETAIN(Type, ZFTypeId_noneOrType, Name, InitValueOrEmpty) \
442 typedef Type _ZFP_PropVT_##Name; \
443 typedef zfauto _ZFP_PropHT_##Name; \
446 zffinal zfclassNotPOD _ZFP_PropV_##Name : zfextend _ZFP_PropRVH<_ZFP_PropVT_##Name> { \
448 _ZFP_PropV_##Name(void) \
450 zfself::_ZFP_Prop_##Name(); \
453 zfself::_ZFP_PropVT_##Name &Init( \
454 ZF_IN ZFObject *owner \
455 , ZF_IN zfbool notifyOwnerAttach \
458 this->Set(InitValueOrEmpty); \
459 _ZFP_ZFPropertyLifeCycleCall_init_retain( \
460 zfself::_ZFP_Prop_##Name() \
462 , zfcast(ZFObject *, this->Get()) \
463 , notifyOwnerAttach \
464 , _ZFP_PropRVH<_ZFP_PropVT_##Name>::VS \
468 return this->Get(); \
471 ZF_IN ZFObject *owner \
472 , ZF_IN zfbool notifyOwnerDetach \
475 _ZFP_ZFPropertyLifeCycleCall_dealloc_retain( \
476 zfself::_ZFP_Prop_##Name() \
478 , zfcast(ZFObject *, this->Get()) \
479 , notifyOwnerDetach \
485 zfself::_ZFP_PropV_##Name Name##_PropV; \
487 static zfbool _ZFP_propCbIsInit_##Name( \
488 ZF_IN const ZFProperty *property \
489 , ZF_IN zfany const &ownerObj \
490 , ZF_OUT_OPT zfauto *outInitValue \
492 zfself *t = zfcast(zfself *, ownerObj); \
493 if(t->Name##_PropV.VA()) { \
494 zfself::_ZFP_PropV_##Name _holder; \
495 if(outInitValue != zfnull) { \
496 *outInitValue = _holder.Init(ownerObj, zffalse); \
498 zfbool ret = (ZFObjectCompareValue( \
499 t->Name(), _holder.Init(ownerObj, zffalse)) \
500 == ZFCompareEqual); \
501 _holder.Dealloc(ownerObj, zffalse); \
509#define _ZFP_ZFPROPERTY_VALUE_DECLARE_ASSIGN(Type, ZFTypeId_noneOrType, Name, \
513 typedef Type _ZFP_PropVT_##Name; \
514 typedef Type _ZFP_PropHT_##Name; \
517 zffinal zfclassNotPOD _ZFP_PropV_##Name : zfextend _ZFP_PropAVH<_ZFP_PropVT_##Name> { \
519 _ZFP_PropV_##Name(void) \
521 zfself::_ZFP_Prop_##Name(); \
524 zfself::_ZFP_PropVT_##Name &Init( \
525 ZF_IN ZFObject *owner \
526 , ZF_IN zfbool notifyOwnerAttach \
529 this->Set(InitValueOrEmpty); \
530 _ZFP_ZFPropertyLifeCycleCall_init_assign( \
531 zfself::_ZFP_Prop_##Name() \
534 , notifyOwnerAttach \
535 , _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(this->Get()) \
538 return this->Get(); \
541 ZF_IN ZFObject *owner \
542 , ZF_IN zfbool notifyOwnerDetach \
545 _ZFP_ZFPropertyLifeCycleCall_dealloc_assign( \
546 zfself::_ZFP_Prop_##Name() \
549 , notifyOwnerDetach \
550 , _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(this->Get()) \
556 zfself::_ZFP_PropV_##Name Name##_PropV; \
558 static zfbool _ZFP_propCbIsInit_##Name( \
559 ZF_IN const ZFProperty *property \
560 , ZF_IN zfany const &ownerObj \
561 , ZF_OUT_OPT zfauto *outInitValue \
563 zfself *t = zfcast(zfself *, ownerObj); \
564 if(t->Name##_PropV.VA()) { \
565 zfself::_ZFP_PropV_##Name _holder; \
566 if(outInitValue != zfnull) { \
567 ZFTypeId<zfself::_ZFP_PropVT_##Name>::ValueStore(*outInitValue, _holder.Init(ownerObj, zffalse)); \
569 zfbool ret = (ZFComparerDefault( \
570 t->Name(), _holder.Init(ownerObj, zffalse)) \
571 == ZFCompareEqual); \
572 _holder.Dealloc(ownerObj, zffalse); \
582#define _ZFP_ZFPROPERTY_DECLARE_CALLBACK(Type, Name) \
584 static zfbool _ZFP_propCbAccessed_##Name( \
585 ZF_IN const ZFProperty *property \
586 , ZF_IN zfany const &ownerObj \
588 return zfcast(zfself *, ownerObj)->Name##_PropV.VA(); \
590 static void _ZFP_propCbReset_##Name( \
591 ZF_IN const ZFProperty *property \
592 , ZF_IN zfany const &owner \
594 if(_ZFP_propCbAccessed_##Name(property, owner)) { \
595 owner->_ZFP_ZFObject_objectPropertyValueOnReset(zfself::_ZFP_Prop_##Name()); \
597 zfcast(zfself *, owner)->Name##_PropV.Dealloc(owner, zftrue); \
599 static void _ZFP_propCbEnsureInit_##Name( \
600 ZF_IN const ZFProperty *property \
601 , ZF_IN zfany const &owner \
603 zfcast(zfself *, owner)->Name##_PropV.Init(owner, zftrue); \
605 static void _ZFP_propCbDel_##Name( \
606 ZF_IN const ZFProperty *property \
607 , ZF_IN zfany const &owner \
609 zfcast(zfself *, owner)->Name##_PropV.Dealloc(owner, zffalse); \
614#define _ZFP_ZFPROPERTY_DECLARE_RETAIN(Type, ZFTypeId_noneOrType, Name, InitValueOrEmpty) \
615 _ZFP_ZFPROPERTY_DECLARE_REGISTER_RETAIN(Type, ZFTypeId_noneOrType, Name, zftTraits<Type>::TrType::ClassData()) \
616 _ZFP_ZFPROPERTY_VALUE_DECLARE_RETAIN(Type, ZFTypeId_noneOrType, Name, InitValueOrEmpty) \
617 _ZFP_ZFPROPERTY_DECLARE_CALLBACK(Type, Name)
618#define _ZFP_ZFPROPERTY_DECLARE_ASSIGN(Type, ZFTypeId_noneOrType, Name, InitValueOrEmpty) \
619 _ZFP_ZFPROPERTY_DECLARE_REGISTER_ASSIGN(Type, ZFTypeId_noneOrType, Name, zfnull) \
620 _ZFP_ZFPROPERTY_VALUE_DECLARE_ASSIGN(Type, ZFTypeId_noneOrType, Name, InitValueOrEmpty) \
621 _ZFP_ZFPROPERTY_DECLARE_CALLBACK(Type, Name)
624#define _ZFP_ZFPROPERTY_SETTER_RETAIN(AccessType, Type, Name) \
626 _ZFP_ZFMETHOD_INLINE( \
628 , AccessType, ZFMethodTypeVirtual, S \
630 , _ZFP_mP_EXPAND(ZFMP_IN(Type const &, propertyValue)) \
631 , _ZFP_ZFMP_DUMMY() \
632 , _ZFP_ZFMP_DUMMY() \
633 , _ZFP_ZFMP_DUMMY() \
634 , _ZFP_ZFMP_DUMMY() \
635 , _ZFP_ZFMP_DUMMY() \
636 , _ZFP_ZFMP_DUMMY() \
637 , _ZFP_ZFMP_DUMMY() \
639 ZFObjectLock(this); \
640 zfbool accessed = Name##_PropV.VA(); \
641 ZFObject *valueOld = zfcast(ZFObject *, Name##_PropV.Init(this->toObject(), zffalse)); \
642 _ZFP_ZFPropertyLifeCycleCall_setter_retain( \
643 zfself::_ZFP_Prop_##Name() \
647 , zfcast(ZFObject *, propertyValue) \
648 , _ZFP_PropRVH<zfself::_ZFP_PropVT_##Name>::VS \
651 ZFObjectUnlock(this); \
654#define _ZFP_ZFPROPERTY_SETTER_ASSIGN(AccessType, Type, Name) \
656 _ZFP_ZFMETHOD_INLINE( \
658 , AccessType, ZFMethodTypeVirtual, S \
660 , _ZFP_mP_EXPAND(ZFMP_IN(Type const &, propertyValue)) \
661 , _ZFP_ZFMP_DUMMY() \
662 , _ZFP_ZFMP_DUMMY() \
663 , _ZFP_ZFMP_DUMMY() \
664 , _ZFP_ZFMP_DUMMY() \
665 , _ZFP_ZFMP_DUMMY() \
666 , _ZFP_ZFMP_DUMMY() \
667 , _ZFP_ZFMP_DUMMY() \
669 ZFObjectLock(this); \
670 zfbool accessed = Name##_PropV.VA(); \
671 Type valueOld = Name##_PropV.Init(this->toObject(), zffalse); \
672 _ZFP_ZFPropertyLifeCycleCall_setter_assign( \
673 zfself::_ZFP_Prop_##Name() \
678 , _ZFP_PropAVH<zfself::_ZFP_PropVT_##Name>::VS \
680 , _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(valueOld) \
681 , _ZFP_PropWeak<zfself::_ZFP_PropVT_##Name>::v(propertyValue) \
683 ZFObjectUnlock(this); \
686#define _ZFP_ZFPROPERTY_GETTER_RETAIN(AccessType, Type, Name) \
688 _ZFP_ZFMETHOD_INLINE( \
690 , AccessType, ZFMethodTypeVirtual, G \
691 , Type const &, Name \
692 , _ZFP_ZFMP_DUMMY() \
693 , _ZFP_ZFMP_DUMMY() \
694 , _ZFP_ZFMP_DUMMY() \
695 , _ZFP_ZFMP_DUMMY() \
696 , _ZFP_ZFMP_DUMMY() \
697 , _ZFP_ZFMP_DUMMY() \
698 , _ZFP_ZFMP_DUMMY() \
699 , _ZFP_ZFMP_DUMMY() \
701 ZFObjectLocker(this); \
702 return Name##_PropV.Init(this->toObject(), zftrue); \
705#define _ZFP_ZFPROPERTY_GETTER_ASSIGN(AccessType, Type, Name) \
707 _ZFP_ZFMETHOD_INLINE( \
709 , AccessType, ZFMethodTypeVirtual, G \
712 , _ZFP_ZFMP_DUMMY() \
713 , _ZFP_ZFMP_DUMMY() \
714 , _ZFP_ZFMP_DUMMY() \
715 , _ZFP_ZFMP_DUMMY() \
716 , _ZFP_ZFMP_DUMMY() \
717 , _ZFP_ZFMP_DUMMY() \
718 , _ZFP_ZFMP_DUMMY() \
719 , _ZFP_ZFMP_DUMMY() \
721 ZFObjectLocker(this); \
722 return Name##_PropV.Init(this->toObject(), zftrue); \
727#define _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_INLINE(Type, Name, lifeCycleName, constFix, extraRegStep) \
729 zfclassNotPOD _ZFP_propLReg_##lifeCycleName##_##Name { \
731 _ZFP_propLReg_##lifeCycleName##_##Name(void) { \
732 static zfbool needInit = zftrue; \
734 needInit = zffalse; \
735 _ZFP_ZFPropertyLifeCycleRegister( \
736 zftext(#lifeCycleName) \
737 , zfself::_ZFP_Prop_##Name() \
738 , zfself::ClassData() \
739 , zfself::_ZFP_propLI_##lifeCycleName##_##Name \
745 _ZFP_propLReg_##lifeCycleName##_##Name _ZFP_propLReg_##lifeCycleName##_##Name; \
746 static void _ZFP_propLI_##lifeCycleName##_##Name( \
747 ZF_IN ZFObject *propertyOwnerObject \
748 , ZF_IN const ZFProperty *property \
749 , ZF_IN void *propertyValue \
750 , ZF_IN const void *propertyValueOld \
751 , ZF_IN ZFObject *propertyLifeCycleUserData \
753 zfcast(zfself *, propertyOwnerObject)->zfself::_ZFP_propL_##lifeCycleName##_##Name( \
754 *(constFix(const) zfself::_ZFP_PropHT_##Name *)propertyValue \
755 , *(zfself::_ZFP_PropHT_##Name *)propertyValueOld \
759 zffinal void _ZFP_propL_##lifeCycleName##_##Name( \
760 ZF_IN zfself::_ZFP_PropHT_##Name constFix(const) &propertyValue \
761 , ZF_IN zfself::_ZFP_PropHT_##Name const &propertyValueOld \
763#define _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DECLARE(Type, Name, lifeCycleName, constFix) \
765 zffinal void _ZFP_propL_##lifeCycleName##_##Name( \
766 ZF_IN zfself::_ZFP_PropHT_##Name constFix(const) &propertyValue \
767 , ZF_IN zfself::_ZFP_PropHT_##Name const &propertyValueOld \
769#define _ZFP_ZFPROPERTY_LIFE_CYCLE_OVERRIDE_DEFINE(OwnerClass, Type, Name, lifeCycleName, constFix, extraRegStep) \
770 ZF_STATIC_REGISTER_INIT(propL_##OwnerClass##_##lifeCycleName##_##Name) { \
771 _ZFP_ZFPropertyLifeCycleRegister( \
772 zftext(#lifeCycleName) \
773 , OwnerClass::_ZFP_Prop_##Name() \
774 , OwnerClass::ClassData() \
781 ZF_IN ZFObject *propertyOwnerObject \
782 , ZF_IN const ZFProperty *property \
783 , ZF_IN void *propertyValue \
784 , ZF_IN const void *propertyValueOld \
785 , ZF_IN ZFObject *propertyLifeCycleUserData \
787 zfcast(OwnerClass *, propertyOwnerObject)->OwnerClass::_ZFP_propL_##lifeCycleName##_##Name( \
788 *(constFix(const) OwnerClass::_ZFP_PropHT_##Name *)propertyValue \
789 , *(OwnerClass::_ZFP_PropHT_##Name *)propertyValueOld \
792 ZF_STATIC_REGISTER_END(propL_##OwnerClass##_##lifeCycleName##_##Name) \
793 void OwnerClass::_ZFP_propL_##lifeCycleName##_##Name( \
794 ZF_IN zfself::_ZFP_PropHT_##Name constFix(const) &propertyValue \
795 , ZF_IN zfself::_ZFP_PropHT_##Name const &propertyValueOld \
798extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleRegister(
802 ,
ZF_IN _ZFP_PropLifeCycleWrapper propertyLifeCycleWrapper
804extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleUnregister(
809extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_init_retain(
814 ,
ZF_IN void (*rawValueStoreCallback)(
818 ,
ZF_IN void *rawValueStoreToken
820extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_init_assign(
827extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_dealloc_retain(
833extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_dealloc_assign(
840extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_setter_retain(
846 ,
ZF_IN void (*rawValueStoreCallback)(
850 ,
ZF_IN void *rawValueStoreToken
852extern ZFLIB_ZFCore void _ZFP_ZFPropertyLifeCycleCall_setter_assign(
856 ,
ZF_IN void *propertyValueOld
857 ,
ZF_IN const void *propertyValueNew
858 ,
ZF_IN void *(*rawValueStoreCallback)(
860 ,
ZF_IN const void *value
862 ,
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 zfnewPlacement(buf, Type,...)
placement new defined for future use
Definition ZFCoreTypeDef_ClassType.h:113
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:191
#define zfdeletePlacement(instance)
placement delete (instance->~Type()) defined for future use
Definition ZFCoreTypeDef_ClassType.h:116
#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 ZF_IN_OUT
dummy macro that shows the param used as required input and output
Definition ZFCoreTypeDef_ClassType.h:207
#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_t_zfbyte zfbyte
8-bit unsigned value, see zfindex
Definition ZFCoreTypeDef_CoreType.h:194
_ZFT_t_zfuint zfuint
same as unsigned int, see zfindex
Definition ZFCoreTypeDef_CoreType.h:169
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:148
#define zfunsafe_zfobjRetain(obj)
no lock version of zfobjRetain, use with caution
Definition ZFObjectRetain.h:128
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:63
base class of all objects
Definition ZFObjectCore.h:195
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