qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/9] qom/user-creatable: add a few helper macros


From: Igor Mammedov
Subject: Re: [Qemu-devel] [PATCH 1/9] qom/user-creatable: add a few helper macros
Date: Mon, 22 Oct 2018 15:33:30 +0100

On Wed, 12 Sep 2018 16:55:23 +0400
Marc-André Lureau <address@hidden> wrote:

> Improve a bit code readability.
> 
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
>  include/qom/object_interfaces.h | 4 ++++
>  qom/object.c                    | 4 ++--
>  qom/object_interfaces.c         | 9 +++------
>  3 files changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/include/qom/object_interfaces.h b/include/qom/object_interfaces.h
> index 4d513fb329..46b0861457 100644
> --- a/include/qom/object_interfaces.h
> +++ b/include/qom/object_interfaces.h
> @@ -9,9 +9,13 @@
>  #define USER_CREATABLE_CLASS(klass) \
>       OBJECT_CLASS_CHECK(UserCreatableClass, (klass), \
>                          TYPE_USER_CREATABLE)
> +#define IS_USER_CREATABLE_CLASS(klass) \
> +    object_class_dynamic_cast(OBJECT_CLASS(oc), TYPE_USER_CREATABLE)
>  #define USER_CREATABLE_GET_CLASS(obj) \
>       OBJECT_GET_CLASS(UserCreatableClass, (obj), \
>                        TYPE_USER_CREATABLE)
> +#define IS_USER_CREATABLE(obj) \
> +    object_dynamic_cast(OBJECT(obj), TYPE_USER_CREATABLE)
>  #define USER_CREATABLE(obj) \
>       INTERFACE_CHECK(UserCreatable, (obj), \
>                       TYPE_USER_CREATABLE)
> diff --git a/qom/object.c b/qom/object.c
> index 75d1d48944..0703e8e4ff 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -424,7 +424,7 @@ void object_initialize_childv(Object *parentobj, const 
> char *propname,
>          goto out;
>      }
>  
> -    if (object_dynamic_cast(obj, TYPE_USER_CREATABLE)) {
> +    if (IS_USER_CREATABLE(obj)) {
>          user_creatable_complete(obj, &local_err);
>          if (local_err) {
>              object_unparent(obj);
> @@ -605,7 +605,7 @@ Object *object_new_with_propv(const char *typename,
>          goto error;
>      }
>  
> -    if (object_dynamic_cast(obj, TYPE_USER_CREATABLE)) {
> +    if (IS_USER_CREATABLE(obj)) {
>          user_creatable_complete(obj, &local_err);
>          if (local_err) {
>              object_unparent(obj);
> diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
> index 72b97a8bed..e3084bc04a 100644
> --- a/qom/object_interfaces.c
> +++ b/qom/object_interfaces.c
> @@ -10,18 +10,15 @@
>  
>  void user_creatable_complete(Object *obj, Error **errp)
>  {
> -
>      UserCreatableClass *ucc;
> -    UserCreatable *uc =
> -        (UserCreatable *)object_dynamic_cast(obj, TYPE_USER_CREATABLE);
>  
> -    if (!uc) {
> +    if (!IS_USER_CREATABLE(obj)) {
>          return;
>      }
>  
> -    ucc = USER_CREATABLE_GET_CLASS(uc);
> +    ucc = USER_CREATABLE_GET_CLASS(obj);
>      if (ucc->complete) {
> -        ucc->complete(uc, errp);
> +        ucc->complete(USER_CREATABLE(obj), errp);
                         ^^^
even though function becomes more concise,
this will call expensive dynamic cast 2nd time (IS_USER_CREATABLE was the 1st 
and discarded)
so I'm not sure is a good idea to regress startup time for readability. 


>      }
>  }
>  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]