[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/23] qom: allow object_class_foreach to take addit
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH 11/23] qom: allow object_class_foreach to take additional parameters to refine search |
Date: |
Mon, 30 Jan 2012 15:08:49 -0600 |
Signed-off-by: Anthony Liguori <address@hidden>
---
hw/qdev.c | 4 ++--
include/qemu/object.h | 1 +
qom/object.c | 18 ++++++++++++++++--
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index 636b6b4..a7980c5 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -255,7 +255,7 @@ int qdev_device_help(QemuOpts *opts)
driver = qemu_opt_get(opts, "driver");
if (driver && !strcmp(driver, "?")) {
bool show_no_user = false;
- object_class_foreach(qdev_print_devinfo, &show_no_user);
+ object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false,
&show_no_user);
return 1;
}
@@ -1077,7 +1077,7 @@ void do_info_qtree(Monitor *mon)
void do_info_qdm(Monitor *mon)
{
- object_class_foreach(qdev_print_devinfo, NULL);
+ object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, NULL);
}
int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
diff --git a/include/qemu/object.h b/include/qemu/object.h
index ba37850..adbcfb1 100644
--- a/include/qemu/object.h
+++ b/include/qemu/object.h
@@ -431,6 +431,7 @@ const char *object_class_get_name(ObjectClass *klass);
ObjectClass *object_class_by_name(const char *typename);
void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque),
+ const char *implements_type, bool include_abstract,
void *opaque);
#endif
diff --git a/qom/object.c b/qom/object.c
index a12895f..3dabb1a 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -467,6 +467,8 @@ ObjectClass *object_class_by_name(const char *typename)
typedef struct OCFData
{
void (*fn)(ObjectClass *klass, void *opaque);
+ const char *implements_type;
+ bool include_abstract;
void *opaque;
} OCFData;
@@ -475,16 +477,28 @@ static void object_class_foreach_tramp(gpointer key,
gpointer value,
{
OCFData *data = opaque;
TypeImpl *type = value;
+ ObjectClass *k;
type_class_init(type);
+ k = type->class;
- data->fn(value, type->class);
+ if (!data->include_abstract && type->abstract) {
+ return;
+ }
+
+ if (data->implements_type &&
+ !object_class_dynamic_cast(k, data->implements_type)) {
+ return;
+ }
+
+ data->fn(k, data->opaque);
}
void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque),
+ const char *implements_type, bool include_abstract,
void *opaque)
{
- OCFData data = { fn, opaque };
+ OCFData data = { fn, implements_type, include_abstract, opaque };
g_hash_table_foreach(type_table_get(), object_class_foreach_tramp, &data);
}
--
1.7.4.1
- [Qemu-devel] [PATCH 06/23] qdev: refactor device creation to allow bus_info to be set only in class, (continued)
- [Qemu-devel] [PATCH 06/23] qdev: refactor device creation to allow bus_info to be set only in class, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 07/23] qdev: kill off DeviceInfo list, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 05/23] qdev: allow classes to overload qdev functions, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 18/23] qom: accept any compatible type when setting a link property, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 08/23] qdev: register all types natively through QEMU Object Model, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 00/23] qom: use Type system to register all devices, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 11/23] qom: allow object_class_foreach to take additional parameters to refine search,
Anthony Liguori <=
- [Qemu-devel] [PATCH 15/23] qdev: split out UI portions into a new function, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 21/23] object: sure up reference counting, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 12/23] qom: add new command to search for types, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 22/23] container: make a decendent of Object, Anthony Liguori, 2012/01/30
- [Qemu-devel] [PATCH 20/23] info qdm: do not require a parent_bus to be set, Anthony Liguori, 2012/01/30