This adds a class property that references a bool within the object instance
and is intended to be used as a replacement for object_class_property_add_bool()
where possible.
Signed-off-by: Mark Cave-Ayland <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
---
include/qom/object.h | 18 ++++++++++++++++++
qom/object.c | 43 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+)
diff --git a/include/qom/object.h b/include/qom/object.h
index 8dead29284..de37016ba8 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -2017,6 +2017,24 @@ typedef enum {
OBJ_PROP_FLAG_READWRITE = (OBJ_PROP_FLAG_READ | OBJ_PROP_FLAG_WRITE),
} ObjectPropertyFlags;
+/**
+ * object_class_property_add_bool_ptr:
+ * @klass: the object class to add a property to
+ * @name: the name of the property
+ * @offset: the offset from the object instance where the bool value is
+ * stored
+ * @flags: bitwise-or'd ObjectPropertyFlags
+ *
+ * Add an boolean property in memory. This function will add a
+ * property of type 'bool'.
+ *
+ * Returns: The newly added property on success, or %NULL on failure.
+ */
+ObjectProperty *object_class_property_add_bool_ptr(ObjectClass *klass,
+ const char *name,
+ ptrdiff_t offset,
+ ObjectPropertyFlags flags);
+
/**
* object_property_add_uint8_ptr:
* @obj: the object to add a property to
diff --git a/qom/object.c b/qom/object.c
index f91764aaa7..635eeeac77 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -2750,6 +2750,49 @@ DEFINE_OBJECT_CLASS_PROPERTY_SCALAR_METHODS(uint64)
#undef DEFINE_OBJECT_CLASS_PROPERTY_SCALAR_METHODS
+static void property_class_get_bool_ptr(Object *obj, Visitor *v,
+ const char *name,
+ void *opaque, Error **errp)
+{
+ bool value = *(bool *)object_class_prop_ptr(obj, (ptrdiff_t)opaque);
+
+ visit_type_bool(v, name, &value, errp);
+}
+
+static void property_class_set_bool_ptr(Object *obj, Visitor *v,
+ const char *name,
+ void *opaque, Error **errp)
+{
+ bool *field = (bool *)object_class_prop_ptr(obj, (ptrdiff_t)opaque);
+ bool value;
+
+ if (!visit_type_bool(v, name, &value, errp)) {
+ return;
+ }
+
+ *field = value;
+}