Macros To Be Used In Inheriting Classes | |
#define | GWEN_INHERIT(bt, t) GWEN_TYPE_UINT32 t##__INHERIT_ID=0; |
#define | GWEN_INHERIT_GETDATA(bt, t, element) ((t*)GWEN_Inherit_FindData(bt##__INHERIT_GETLIST(element),t##__INHERIT_ID,0)) |
#define | GWEN_INHERIT_ISOFTYPE(bt, t, element) |
#define | GWEN_INHERIT_SETDATA(bt, t, element, data, fn) |
#define | GWEN_INHERIT_UNLINK(bt, t, element) |
Macros To Be Used In Inherited Classes - Header Files | |
#define | GWEN_INHERIT_ELEMENT(t) GWEN_INHERITDATA_LIST *INHERIT__list; |
#define | GWEN_INHERIT_FUNCTION_DEFS(t) GWEN_INHERIT_FUNCTION_LIB_DEFS(t, GWEN_DUMMY_EMPTY_ARG) |
#define | GWEN_INHERIT_FUNCTION_LIB_DEFS(t, decl) |
Macros To Be Used In Inherited Classes - C Files | |
#define | GWEN_INHERIT_FINI(t, element) |
#define | GWEN_INHERIT_FUNCTIONS(t) |
#define | GWEN_INHERIT_INIT(t, element) |
Typedefs | |
typedef void(*) | GWEN_INHERIT_FREEDATAFN (void *baseData, void *data) |
Functions | |
GWENHYWFAR_API void * | GWEN_Inherit_FindData (GWEN_INHERITDATA_LIST *l, GWEN_TYPE_UINT32 id, int wantCreate) |
GWENHYWFAR_API GWEN_INHERITDATA * | GWEN_Inherit_FindEntry (GWEN_INHERITDATA_LIST *l, GWEN_TYPE_UINT32 id, int wantCreate) |
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_Inherit_MakeId (const char *typeName) |
GWENHYWFAR_API void | GWEN_InheritData_clear (GWEN_INHERITDATA *d) |
GWENHYWFAR_API void | GWEN_InheritData_free (GWEN_INHERITDATA *d) |
GWENHYWFAR_API void * | GWEN_InheritData_GetData (const GWEN_INHERITDATA *d) |
GWENHYWFAR_API GWEN_INHERIT_FREEDATAFN | GWEN_InheritData_GetFreeDataFn (const GWEN_INHERITDATA *d) |
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_InheritData_GetId (const GWEN_INHERITDATA *d) |
GWENHYWFAR_API const char * | GWEN_InheritData_GetTypeName (const GWEN_INHERITDATA *d) |
GWENHYWFAR_API GWEN_INHERITDATA * | GWEN_InheritData_new (const char *t, GWEN_TYPE_UINT32 id, void *data, void *baseData, GWEN_INHERIT_FREEDATAFN fn) |
#define GWEN_INHERIT | ( | bt, | |||
t | ) | GWEN_TYPE_UINT32 t##__INHERIT_ID=0; |
Use this in the C file of inheriting classes. It initializes a global variable with a hash of the inheriting type name. This is used to speed up inheritance functions. This variable will be filled with a value upon the first invocation of the macro GWEN_INHERIT_SETDATA.
#define GWEN_INHERIT_ELEMENT | ( | t | ) | GWEN_INHERITDATA_LIST *INHERIT__list; |
Use this macro inside the struct which you want to make inheritable. This macro defines some new elements for the struct for administration of inheritance.
#define GWEN_INHERIT_FINI | ( | t, | |||
element | ) |
Value:
{\ assert(element);\ GWEN_InheritData_List_free(element->INHERIT__list);\ }
#define GWEN_INHERIT_FUNCTION_DEFS | ( | t | ) | GWEN_INHERIT_FUNCTION_LIB_DEFS(t, GWEN_DUMMY_EMPTY_ARG) |
Use this macro in the header file of the base class. This defines the prototypes of some inheritance functions. This macro should be used in applications, not in libraries. In libraries please use the macro GWEN_INHERIT_FUNCTION_LIB_DEFS.
You should not care about these functions here, since you should not use them directly. Please use GWEN_INHERIT_GETDATA and GWEN_INHERIT_SETDATA instead.
#define GWEN_INHERIT_FUNCTION_LIB_DEFS | ( | t, | |||
decl | ) |
Value:
decl void t##__INHERIT_SETDATA(t *element, \ const char *typeName,\ GWEN_TYPE_UINT32 id,\ void *data,\ GWEN_INHERIT_FREEDATAFN f);\ decl int t##__INHERIT_ISOFTYPE(t *element, GWEN_TYPE_UINT32 id);\ decl GWEN_INHERITDATA_LIST *t##__INHERIT_GETLIST(const t *element);\ decl void t##__INHERIT_UNLINK(t *element, \ const char *typeName,\ GWEN_TYPE_UINT32 id);
decl
argument.You should not care about these functions here, since you should not use them directly. Please use GWEN_INHERIT_GETDATA and GWEN_INHERIT_SETDATA instead.
#define GWEN_INHERIT_FUNCTIONS | ( | t | ) |
Use this macro in the C file of the base class. It defines the implementations of the inheritance functions. This macro MUST be placed after the include statement which includes the classes header file.
#define GWEN_INHERIT_GETDATA | ( | bt, | |||
t, | |||||
element | ) | ((t*)GWEN_Inherit_FindData(bt##__INHERIT_GETLIST(element),t##__INHERIT_ID,0)) |
This macros returns the private data of an inheriting class associated with an element of its base class.
#define GWEN_INHERIT_INIT | ( | t, | |||
element | ) |
Value:
{\ assert(element);\ element->INHERIT__list=GWEN_InheritData_List_new();\ }
#define GWEN_INHERIT_ISOFTYPE | ( | bt, | |||
t, | |||||
element | ) |
Value:
((bt##__INHERIT_ISOFTYPE(element,\ ((t##__INHERIT_ID==0)?\ ((t##__INHERIT_ID=GWEN_Inherit_MakeId(__STRING(t)))):\ t##__INHERIT_ID)))?1:0)
bt | base type | |
t | derived type | |
element | pointer which is to be checked |
#define GWEN_INHERIT_SETDATA | ( | bt, | |||
t, | |||||
element, | |||||
data, | |||||
fn | ) |
Value:
{\ if (!t##__INHERIT_ID)\ t##__INHERIT_ID=GWEN_Inherit_MakeId(__STRING(t));\ bt##__INHERIT_SETDATA(element, __STRING(t), t##__INHERIT_ID, data, fn);\ }
typedef void (*function)(void *baseData, void *data);
#define GWEN_INHERIT_UNLINK | ( | bt, | |||
t, | |||||
element | ) |
Value:
{\ if (!t##__INHERIT_ID)\ t##__INHERIT_ID=GWEN_Inherit_MakeId(__STRING(t));\ bt##__INHERIT_UNLINK(element, __STRING(t), t##__INHERIT_ID);\ }
bt | base type | |
t | derived type |
typedef void(*) GWEN_INHERIT_FREEDATAFN(void *baseData, void *data) |
GWENHYWFAR_API void* GWEN_Inherit_FindData | ( | GWEN_INHERITDATA_LIST * | l, | |
GWEN_TYPE_UINT32 | id, | |||
int | wantCreate | |||
) |
GWENHYWFAR_API GWEN_INHERITDATA* GWEN_Inherit_FindEntry | ( | GWEN_INHERITDATA_LIST * | l, | |
GWEN_TYPE_UINT32 | id, | |||
int | wantCreate | |||
) |
GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_Inherit_MakeId | ( | const char * | typeName | ) |
GWENHYWFAR_API void GWEN_InheritData_clear | ( | GWEN_INHERITDATA * | d | ) |
GWENHYWFAR_API void GWEN_InheritData_free | ( | GWEN_INHERITDATA * | d | ) |
GWENHYWFAR_API void* GWEN_InheritData_GetData | ( | const GWEN_INHERITDATA * | d | ) |
GWENHYWFAR_API GWEN_INHERIT_FREEDATAFN GWEN_InheritData_GetFreeDataFn | ( | const GWEN_INHERITDATA * | d | ) |
GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_InheritData_GetId | ( | const GWEN_INHERITDATA * | d | ) |
GWENHYWFAR_API const char* GWEN_InheritData_GetTypeName | ( | const GWEN_INHERITDATA * | d | ) |
GWENHYWFAR_API GWEN_INHERITDATA* GWEN_InheritData_new | ( | const char * | t, | |
GWEN_TYPE_UINT32 | id, | |||
void * | data, | |||
void * | baseData, | |||
GWEN_INHERIT_FREEDATAFN | fn | |||
) |