Patchwork [2/5] qom: introduce object_is_type_str(), so we can judge its type.

login
register
mail settings
Submitter pingfan liu
Date July 10, 2012, 6:16 a.m.
Message ID <1341900967-4344-3-git-send-email-qemulist@gmail.com>
Download mbox | patch
Permalink /patch/170071/
State New
Headers show

Comments

pingfan liu - July 10, 2012, 6:16 a.m.
Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
---
 include/qemu/object.h |    2 ++
 qom/object.c          |    6 ++++++
 2 files changed, 8 insertions(+), 0 deletions(-)
Paolo Bonzini - July 10, 2012, 8:39 a.m.
Il 10/07/2012 08:16, Liu Ping Fan ha scritto:
> Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
> ---
>  include/qemu/object.h |    2 ++
>  qom/object.c          |    6 ++++++
>  2 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/include/qemu/object.h b/include/qemu/object.h
> index 8b17776..a66e996 100644
> --- a/include/qemu/object.h
> +++ b/include/qemu/object.h
> @@ -479,6 +479,8 @@ void object_initialize(void *obj, const char *typename);
>   */
>  void object_finalize(void *obj);
>  
> +bool object_is_type_str(Object *obj, const char *typename);

Please call this object_is_instance_of, and just call
object_dynamic_cast internally so that interfaces are handled properly.

Paolo

> +
>  /**
>   * object_dynamic_cast:
>   * @obj: The object to cast.
> diff --git a/qom/object.c b/qom/object.c
> index 00bb3b0..6c27d90 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -425,6 +425,12 @@ static bool type_is_ancestor(TypeImpl *type, TypeImpl *target_type)
>      return false;
>  }
>  
> +bool object_is_type_str(Object *obj, const char *typename)
> +{
> +    TypeImpl *target_type = type_get_by_name(typename);
> +    return !target_type || type_is_ancestor(obj->class->type, target_type);
> +}
> +
>  static bool object_is_type(Object *obj, TypeImpl *target_type)
>  {
>      return !target_type || type_is_ancestor(obj->class->type, target_type);
>
pingfan liu - July 11, 2012, 1:17 a.m.
On Tue, Jul 10, 2012 at 4:39 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 10/07/2012 08:16, Liu Ping Fan ha scritto:
>> Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
>> ---
>>  include/qemu/object.h |    2 ++
>>  qom/object.c          |    6 ++++++
>>  2 files changed, 8 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/qemu/object.h b/include/qemu/object.h
>> index 8b17776..a66e996 100644
>> --- a/include/qemu/object.h
>> +++ b/include/qemu/object.h
>> @@ -479,6 +479,8 @@ void object_initialize(void *obj, const char *typename);
>>   */
>>  void object_finalize(void *obj);
>>
>> +bool object_is_type_str(Object *obj, const char *typename);
>
> Please call this object_is_instance_of, and just call
> object_dynamic_cast internally so that interfaces are handled properly.
>
OK, will update it in next version

regards,
pingfan

> Paolo
>
>> +
>>  /**
>>   * object_dynamic_cast:
>>   * @obj: The object to cast.
>> diff --git a/qom/object.c b/qom/object.c
>> index 00bb3b0..6c27d90 100644
>> --- a/qom/object.c
>> +++ b/qom/object.c
>> @@ -425,6 +425,12 @@ static bool type_is_ancestor(TypeImpl *type, TypeImpl *target_type)
>>      return false;
>>  }
>>
>> +bool object_is_type_str(Object *obj, const char *typename)
>> +{
>> +    TypeImpl *target_type = type_get_by_name(typename);
>> +    return !target_type || type_is_ancestor(obj->class->type, target_type);
>> +}
>> +
>>  static bool object_is_type(Object *obj, TypeImpl *target_type)
>>  {
>>      return !target_type || type_is_ancestor(obj->class->type, target_type);
>>
>
>

Patch

diff --git a/include/qemu/object.h b/include/qemu/object.h
index 8b17776..a66e996 100644
--- a/include/qemu/object.h
+++ b/include/qemu/object.h
@@ -479,6 +479,8 @@  void object_initialize(void *obj, const char *typename);
  */
 void object_finalize(void *obj);
 
+bool object_is_type_str(Object *obj, const char *typename);
+
 /**
  * object_dynamic_cast:
  * @obj: The object to cast.
diff --git a/qom/object.c b/qom/object.c
index 00bb3b0..6c27d90 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -425,6 +425,12 @@  static bool type_is_ancestor(TypeImpl *type, TypeImpl *target_type)
     return false;
 }
 
+bool object_is_type_str(Object *obj, const char *typename)
+{
+    TypeImpl *target_type = type_get_by_name(typename);
+    return !target_type || type_is_ancestor(obj->class->type, target_type);
+}
+
 static bool object_is_type(Object *obj, TypeImpl *target_type)
 {
     return !target_type || type_is_ancestor(obj->class->type, target_type);