[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 1/6] qom: macroify integer property helpers
From: |
Alexander Graf |
Subject: |
[Qemu-ppc] [PATCH 1/6] qom: macroify integer property helpers |
Date: |
Tue, 1 Jul 2014 23:49:33 +0200 |
We have a bunch of nice helpers that allow us to easily register an integer
field as QOM property. However, we have those duplicated for every integer
size available.
This is very cumbersome (and prone to bugs) to work with and extend, so let's
strip out the only difference there is (the size) and generate the actual
functions via a macro.
Signed-off-by: Alexander Graf <address@hidden>
---
qom/object.c | 83 ++++++++++++++++++------------------------------------------
1 file changed, 24 insertions(+), 59 deletions(-)
diff --git a/qom/object.c b/qom/object.c
index 0e8267b..73cd717 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1507,65 +1507,30 @@ static char *qdev_get_type(Object *obj, Error **errp)
return g_strdup(object_get_typename(obj));
}
-static void property_get_uint8_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint8_t value = *(uint8_t *)opaque;
- visit_type_uint8(v, &value, name, errp);
-}
-
-static void property_get_uint16_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint16_t value = *(uint16_t *)opaque;
- visit_type_uint16(v, &value, name, errp);
-}
-
-static void property_get_uint32_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint32_t value = *(uint32_t *)opaque;
- visit_type_uint32(v, &value, name, errp);
-}
-
-static void property_get_uint64_ptr(Object *obj, Visitor *v,
- void *opaque, const char *name,
- Error **errp)
-{
- uint64_t value = *(uint64_t *)opaque;
- visit_type_uint64(v, &value, name, errp);
-}
-
-void object_property_add_uint8_ptr(Object *obj, const char *name,
- const uint8_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint8", property_get_uint8_ptr,
- NULL, NULL, (void *)v, errp);
-}
-
-void object_property_add_uint16_ptr(Object *obj, const char *name,
- const uint16_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint16", property_get_uint16_ptr,
- NULL, NULL, (void *)v, errp);
-}
-
-void object_property_add_uint32_ptr(Object *obj, const char *name,
- const uint32_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint32", property_get_uint32_ptr,
- NULL, NULL, (void *)v, errp);
-}
-
-void object_property_add_uint64_ptr(Object *obj, const char *name,
- const uint64_t *v, Error **errp)
-{
- object_property_add(obj, name, "uint64", property_get_uint64_ptr,
- NULL, NULL, (void *)v, errp);
-}
+#define DECLARE_INTEGER_VISITOR(size)
\
+
\
+static void glue(glue(property_get_,size),_ptr)(Object *obj, Visitor *v,
\
+ void *opaque,
\
+ const char *name,
\
+ Error **errp)
\
+{
\
+ glue(size,_t) value = *(glue(size,_t) *)opaque;
\
+ glue(visit_type_,size)(v, &value, name, errp);
\
+}
\
+
\
+void glue(glue(object_property_add_,size),_ptr)(Object *obj, const char *name,
\
+ const glue(size,_t) *v,
\
+ Error **errp)
\
+{
\
+ ObjectPropertyAccessor *get = glue(glue(property_get_,size),_ptr);
\
+ object_property_add(obj, name, stringify(size), get, NULL, NULL, (void
*)v,\
+ errp);
\
+}
\
+
+DECLARE_INTEGER_VISITOR(uint8)
+DECLARE_INTEGER_VISITOR(uint16)
+DECLARE_INTEGER_VISITOR(uint32)
+DECLARE_INTEGER_VISITOR(uint64)
typedef struct {
Object *target_obj;
--
1.8.1.4
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, (continued)
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, Alexander Graf, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, Scott Wood, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, Alexander Graf, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, Scott Wood, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, Alexander Graf, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, Scott Wood, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 5/6] PPC: e500: Support dynamically spawned sysbus devices, Alexander Graf, 2014/07/02
[Qemu-ppc] [PATCH 4/6] sysbus: Make devices spawnable via -device, Alexander Graf, 2014/07/01
[Qemu-ppc] [PATCH 1/6] qom: macroify integer property helpers,
Alexander Graf <=
[Qemu-ppc] [PATCH 3/6] sysbus: Add user map hints, Alexander Graf, 2014/07/01
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/6] sysbus: Add user map hints, Peter Crosthwaite, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/6] sysbus: Add user map hints, Alexander Graf, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/6] sysbus: Add user map hints, Paolo Bonzini, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/6] sysbus: Add user map hints, Peter Crosthwaite, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/6] sysbus: Add user map hints, Alexander Graf, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/6] sysbus: Add user map hints, Paolo Bonzini, 2014/07/02
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/6] sysbus: Add user map hints, Alexander Graf, 2014/07/02