qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: qemu-ppc@nongnu.org
Cc: peter.maydell@linaro.org, peter.crosthwaite@xilinx.com,
	eric.auger@linaro.org, qemu-devel@nongnu.org,
	sean.stalley@intel.com, pbonzini@redhat.com, afaerber@suse.de
Subject: [Qemu-devel] [PATCH v2 2/9] qom: macroify integer property helpers
Date: Wed,  2 Jul 2014 20:01:26 +0200	[thread overview]
Message-ID: <1404324093-19225-3-git-send-email-agraf@suse.de> (raw)
In-Reply-To: <1404324093-19225-1-git-send-email-agraf@suse.de>

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 <agraf@suse.de>

---

v1 -> v2:

  - Rename DECLARE_INTEGER_VISITOR to DECLARE_PROP_SET_GET
  - Make macro take name and type arguments, enabling generation of "bool"
    types later
---
 qom/property.c | 82 +++++++++++++++++-----------------------------------------
 1 file changed, 24 insertions(+), 58 deletions(-)

diff --git a/qom/property.c b/qom/property.c
index 9e7c92a..944daff 100644
--- a/qom/property.c
+++ b/qom/property.c
@@ -151,62 +151,28 @@ void object_property_add_bool(Object *obj, const char *name,
     }
 }
 
-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);
-}
+#define DECLARE_PROP_SET_GET(name, valtype)                                    \
+                                                                               \
+static void glue(glue(property_get_,name),_ptr)(Object *obj, Visitor *v,       \
+                                                void *opaque,                  \
+                                                const char *name,              \
+                                                Error **errp)                  \
+{                                                                              \
+    valtype value = *(valtype *)opaque;                                        \
+    glue(visit_type_,name)(v, &value, name, errp);                             \
+}                                                                              \
+                                                                               \
+void glue(glue(object_property_add_,name),_ptr)(Object *obj, const char *name, \
+                                                const valtype *v,              \
+                                                Error **errp)                  \
+{                                                                              \
+    ObjectPropertyAccessor *get = glue(glue(property_get_,name),_ptr);         \
+    object_property_add(obj, name, stringify(name), get, NULL, NULL, (void *)v,\
+                        errp);                                                 \
+}                                                                              \
+
+DECLARE_PROP_SET_GET(uint8, uint8_t)
+DECLARE_PROP_SET_GET(uint16, uint16_t)
+DECLARE_PROP_SET_GET(uint32, uint32_t)
+DECLARE_PROP_SET_GET(uint64, uint64_t)
 
-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);
-}
-- 
1.8.1.4

  parent reply	other threads:[~2014-07-02 18:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-02 18:01 [Qemu-devel] [PATCH v2 0/9] Dynamic sysbus device allocation support Alexander Graf
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 1/9] qom: Move property helpers to own file Alexander Graf
2014-07-31 13:46   ` Peter Crosthwaite
2014-07-31 14:12     ` Alexander Graf
2014-07-02 18:01 ` Alexander Graf [this message]
2014-07-31 13:44   ` [Qemu-devel] [PATCH v2 2/9] qom: macroify integer property helpers Peter Crosthwaite
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 3/9] qom: Expose property helpers for get/set of integers Alexander Graf
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 4/9] qom: Add generic object property g_free helper Alexander Graf
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 5/9] sysbus: Add user map hints Alexander Graf
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 6/9] sysbus: Make devices spawnable via -device Alexander Graf
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 7/9] PPC: e500: Support dynamically spawned sysbus devices Alexander Graf
2014-07-30 14:55   ` Peter Maydell
2014-07-31  4:07     ` Peter Crosthwaite
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 8/9] e500: Add support for eTSEC in device tree Alexander Graf
2014-07-02 18:01 ` [Qemu-devel] [PATCH v2 9/9] PPC: Fix default config ordering and add eTSEC for ppc64 Alexander Graf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1404324093-19225-3-git-send-email-agraf@suse.de \
    --to=agraf@suse.de \
    --cc=afaerber@suse.de \
    --cc=eric.auger@linaro.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.crosthwaite@xilinx.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=sean.stalley@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).