object: add class property initializer
This callback is used to set default value in following patch "object: add object_property_set_defaut_{bool,str,int,uint}()". Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20200110153039.1379601-7-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
ba806ffbdf
commit
2a1be4b348
@ -309,6 +309,8 @@ typedef struct InterfaceInfo InterfaceInfo;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ObjectProperty ObjectProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ObjectPropertyAccessor:
|
* ObjectPropertyAccessor:
|
||||||
* @obj: the object that owns the property
|
* @obj: the object that owns the property
|
||||||
@ -356,7 +358,16 @@ typedef void (ObjectPropertyRelease)(Object *obj,
|
|||||||
const char *name,
|
const char *name,
|
||||||
void *opaque);
|
void *opaque);
|
||||||
|
|
||||||
typedef struct ObjectProperty
|
/**
|
||||||
|
* ObjectPropertyInit:
|
||||||
|
* @obj: the object that owns the property
|
||||||
|
* @prop: the property to set
|
||||||
|
*
|
||||||
|
* Called when a property is initialized.
|
||||||
|
*/
|
||||||
|
typedef void (ObjectPropertyInit)(Object *obj, ObjectProperty *prop);
|
||||||
|
|
||||||
|
struct ObjectProperty
|
||||||
{
|
{
|
||||||
gchar *name;
|
gchar *name;
|
||||||
gchar *type;
|
gchar *type;
|
||||||
@ -365,8 +376,9 @@ typedef struct ObjectProperty
|
|||||||
ObjectPropertyAccessor *set;
|
ObjectPropertyAccessor *set;
|
||||||
ObjectPropertyResolve *resolve;
|
ObjectPropertyResolve *resolve;
|
||||||
ObjectPropertyRelease *release;
|
ObjectPropertyRelease *release;
|
||||||
|
ObjectPropertyInit *init;
|
||||||
void *opaque;
|
void *opaque;
|
||||||
} ObjectProperty;
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ObjectUnparent:
|
* ObjectUnparent:
|
||||||
|
14
qom/object.c
14
qom/object.c
@ -478,6 +478,19 @@ void object_apply_compat_props(Object *obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void object_class_property_init_all(Object *obj)
|
||||||
|
{
|
||||||
|
ObjectPropertyIterator iter;
|
||||||
|
ObjectProperty *prop;
|
||||||
|
|
||||||
|
object_class_property_iter_init(&iter, object_get_class(obj));
|
||||||
|
while ((prop = object_property_iter_next(&iter))) {
|
||||||
|
if (prop->init) {
|
||||||
|
prop->init(obj, prop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void object_initialize_with_type(void *data, size_t size, TypeImpl *type)
|
static void object_initialize_with_type(void *data, size_t size, TypeImpl *type)
|
||||||
{
|
{
|
||||||
Object *obj = data;
|
Object *obj = data;
|
||||||
@ -491,6 +504,7 @@ static void object_initialize_with_type(void *data, size_t size, TypeImpl *type)
|
|||||||
memset(obj, 0, type->instance_size);
|
memset(obj, 0, type->instance_size);
|
||||||
obj->class = type->class;
|
obj->class = type->class;
|
||||||
object_ref(obj);
|
object_ref(obj);
|
||||||
|
object_class_property_init_all(obj);
|
||||||
obj->properties = g_hash_table_new_full(g_str_hash, g_str_equal,
|
obj->properties = g_hash_table_new_full(g_str_hash, g_str_equal,
|
||||||
NULL, object_property_free);
|
NULL, object_property_free);
|
||||||
object_init_with_type(obj, type);
|
object_init_with_type(obj, type);
|
||||||
|
Loading…
Reference in New Issue
Block a user