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:
|
||||
* @obj: the object that owns the property
|
||||
@ -356,7 +358,16 @@ typedef void (ObjectPropertyRelease)(Object *obj,
|
||||
const char *name,
|
||||
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 *type;
|
||||
@ -365,8 +376,9 @@ typedef struct ObjectProperty
|
||||
ObjectPropertyAccessor *set;
|
||||
ObjectPropertyResolve *resolve;
|
||||
ObjectPropertyRelease *release;
|
||||
ObjectPropertyInit *init;
|
||||
void *opaque;
|
||||
} ObjectProperty;
|
||||
};
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
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);
|
||||
obj->class = type->class;
|
||||
object_ref(obj);
|
||||
object_class_property_init_all(obj);
|
||||
obj->properties = g_hash_table_new_full(g_str_hash, g_str_equal,
|
||||
NULL, object_property_free);
|
||||
object_init_with_type(obj, type);
|
||||
|
Loading…
Reference in New Issue
Block a user