Add a new macro to the Objective-C uniquifying support that allows a
uniquified class to be a subclasses of another uniquified class. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51891 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
9eaadb1b8c
commit
83259e23a4
@ -296,6 +296,16 @@ inline objc_class * wxObjcCompilerInformation<ObjcClass>::GetCompiledClass() \
|
|||||||
return objc_getClass(#ObjcSuperClass); \
|
return objc_getClass(#ObjcSuperClass); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The WX_IMPLEMENT_OBJC_GET_UNIQUIFIED_SUPERCLASS macro implements the template
|
||||||
|
// specialization to get the superclass when the superclass is another uniquified
|
||||||
|
// Objective-C class.
|
||||||
|
#define WX_IMPLEMENT_OBJC_GET_UNIQUIFIED_SUPERCLASS(ObjcClass,ObjcSuperClass) \
|
||||||
|
template <> \
|
||||||
|
inline objc_class* wxObjcCompilerInformation<ObjcClass>::GetSuperclass() \
|
||||||
|
{ \
|
||||||
|
return wx_GetObjcClass_ ## ObjcSuperClass(); \
|
||||||
|
}
|
||||||
|
|
||||||
// The WX_IMPLEMENT_OBJC_CLASS_NAME macro implements the template specialization
|
// The WX_IMPLEMENT_OBJC_CLASS_NAME macro implements the template specialization
|
||||||
// of the sm_theClassName constant. As soon as this specialization is in place
|
// of the sm_theClassName constant. As soon as this specialization is in place
|
||||||
// sizeof(sm_theClassName) will return the number of bytes at compile time.
|
// sizeof(sm_theClassName) will return the number of bytes at compile time.
|
||||||
@ -303,17 +313,31 @@ inline objc_class * wxObjcCompilerInformation<ObjcClass>::GetCompiledClass() \
|
|||||||
template <> \
|
template <> \
|
||||||
const char wxObjcCompilerInformation<ObjcClass>::sm_theClassName[] = #ObjcClass;
|
const char wxObjcCompilerInformation<ObjcClass>::sm_theClassName[] = #ObjcClass;
|
||||||
|
|
||||||
// The WX_IMPLEMENT_GET_OBJC_CLASS macro combines all of these together and adds
|
// The WX_IMPLEMENT_OBJC_GET_OBJC_CLASS macro is the final one that actually provides
|
||||||
// a global wx_GetObjcClass_ObjcClass() function.
|
// the wx_GetObjcClass_XXX function that will be called in lieu of asking the Objective-C
|
||||||
#define WX_IMPLEMENT_GET_OBJC_CLASS(ObjcClass,ObjcSuperClass) \
|
// runtime for the class. All the others are really machinery to make this happen.
|
||||||
WX_IMPLEMENT_OBJC_GET_COMPILED_CLASS(ObjcClass) \
|
#define WX_IMPLEMENT_OBJC_GET_OBJC_CLASS(ObjcClass) \
|
||||||
WX_IMPLEMENT_OBJC_GET_SUPERCLASS(ObjcClass,ObjcSuperClass) \
|
|
||||||
WX_IMPLEMENT_OBJC_CLASS_NAME(ObjcClass) \
|
|
||||||
objc_class* wx_GetObjcClass_ ## ObjcClass() \
|
objc_class* wx_GetObjcClass_ ## ObjcClass() \
|
||||||
{ \
|
{ \
|
||||||
return wxObjcClassInitializer<ObjcClass>::Get(); \
|
return wxObjcClassInitializer<ObjcClass>::Get(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The WX_IMPLEMENT_GET_OBJC_CLASS macro combines all of these together
|
||||||
|
// for the case when the superclass is a non-uniquified class.
|
||||||
|
#define WX_IMPLEMENT_GET_OBJC_CLASS(ObjcClass,ObjcSuperClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_GET_COMPILED_CLASS(ObjcClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_GET_SUPERCLASS(ObjcClass,ObjcSuperClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_CLASS_NAME(ObjcClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_GET_OBJC_CLASS(ObjcClass)
|
||||||
|
|
||||||
|
// The WX_IMPLEMENT_GET_OBJC_CLASS_WITH_UNIQUIFIED_SUPERCLASS macro combines all
|
||||||
|
// of these together for the case when the superclass is another uniquified class.
|
||||||
|
#define WX_IMPLEMENT_GET_OBJC_CLASS_WITH_UNIQUIFIED_SUPERCLASS(ObjcClass,ObjcSuperClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_GET_COMPILED_CLASS(ObjcClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_GET_UNIQUIFIED_SUPERCLASS(ObjcClass,ObjcSuperClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_CLASS_NAME(ObjcClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_GET_OBJC_CLASS(ObjcClass)
|
||||||
|
|
||||||
// The WX_GET_OBJC_CLASS macro is intended to wrap the class name when the class
|
// The WX_GET_OBJC_CLASS macro is intended to wrap the class name when the class
|
||||||
// is used as a message receiver (e.g. for calling class methods). When
|
// is used as a message receiver (e.g. for calling class methods). When
|
||||||
// class name uniquifying is used, this calls the global function implemented
|
// class name uniquifying is used, this calls the global function implemented
|
||||||
@ -326,6 +350,8 @@ inline objc_class * wxObjcCompilerInformation<ObjcClass>::GetCompiledClass() \
|
|||||||
#define WX_DECLARE_GET_OBJC_CLASS(ObjcClass,ObjcSuperClass)
|
#define WX_DECLARE_GET_OBJC_CLASS(ObjcClass,ObjcSuperClass)
|
||||||
// Define WX_IMPLEMENT_GET_OBJC_CLASS as nothing
|
// Define WX_IMPLEMENT_GET_OBJC_CLASS as nothing
|
||||||
#define WX_IMPLEMENT_GET_OBJC_CLASS(ObjcClass,ObjcSuperClass)
|
#define WX_IMPLEMENT_GET_OBJC_CLASS(ObjcClass,ObjcSuperClass)
|
||||||
|
// Define WX_IMPLEMENT_GET_OBJC_CLASS_WITH_UNIQUIFIED_SUPERCLASS as nothing
|
||||||
|
#define WX_IMPLEMENT_GET_OBJC_CLASS_WITH_UNIQUIFIED_SUPERCLASS(ObjcClass,ObjcSuperClass)
|
||||||
|
|
||||||
// Define WX_GET_OBJC_CLASS macro to output the class name and let the compiler do the normal thing
|
// Define WX_GET_OBJC_CLASS macro to output the class name and let the compiler do the normal thing
|
||||||
// The WX_GET_OBJC_CLASS macro is intended to wrap the class name when the class
|
// The WX_GET_OBJC_CLASS macro is intended to wrap the class name when the class
|
||||||
|
Loading…
Reference in New Issue
Block a user