object: Add a virtual pointer for the unref function
The virtual function gets called in cogl_object_unref. Any definition of a CoglObject type can replace the default unref function by using COGL_OBJECT_DEFINE_WITH_CODE to directly manipulate the CoglObjectClass struct. The generated object constructors set the pointer to the default implementation. The default implementation is exported in the private header so that any overriding implementations can chain up to it. Reviewed-by: Robert Bragg <robert@linux.intel.com>
This commit is contained in:
parent
139421de19
commit
688a3e196b
@ -53,6 +53,7 @@ typedef struct _CoglObjectClass
|
||||
{
|
||||
const char *name;
|
||||
void *virt_free;
|
||||
void *virt_unref;
|
||||
} CoglObjectClass;
|
||||
|
||||
#define COGL_OBJECT_N_PRE_ALLOCATED_USER_DATA_ENTRIES 2
|
||||
@ -167,6 +168,8 @@ _cogl_##type_name##_object_new (Cogl##TypeName *new_obj) \
|
||||
\
|
||||
obj->klass->virt_free = \
|
||||
_cogl_object_##type_name##_indirect_free; \
|
||||
obj->klass->virt_unref = \
|
||||
_cogl_object_default_unref; \
|
||||
obj->klass->name = "Cogl"#TypeName, \
|
||||
\
|
||||
g_hash_table_insert (_cogl_debug_instances, \
|
||||
@ -287,5 +290,8 @@ _cogl_object_set_user_data (CoglObject *object,
|
||||
void *user_data,
|
||||
CoglUserDataDestroyInternalCallback destroy);
|
||||
|
||||
void
|
||||
_cogl_object_default_unref (void *obj);
|
||||
|
||||
#endif /* __COGL_OBJECT_PRIVATE_H */
|
||||
|
||||
|
@ -52,7 +52,7 @@ cogl_handle_ref (CoglHandle handle)
|
||||
}
|
||||
|
||||
void
|
||||
cogl_object_unref (void *object)
|
||||
_cogl_object_default_unref (void *object)
|
||||
{
|
||||
CoglObject *obj = object;
|
||||
|
||||
@ -97,6 +97,13 @@ cogl_object_unref (void *object)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
cogl_object_unref (void *obj)
|
||||
{
|
||||
void (* unref_func) (void *) = ((CoglObject *) obj)->klass->virt_unref;
|
||||
unref_func (obj);
|
||||
}
|
||||
|
||||
void
|
||||
cogl_handle_unref (CoglHandle handle)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user