diff options
| author | Max Reitz | 2017-11-14 19:01:25 +0100 |
|---|---|---|
| committer | Max Reitz | 2017-11-17 18:21:30 +0100 |
| commit | b38dd678a21582e03ecd2dec76ccf8290455628a (patch) | |
| tree | 1076a9bc7235d44314418bb7ef140685692e999e /qobject/qdict.c | |
| parent | qapi/qlist: Add qlist_append_null() macro (diff) | |
| download | qemu-b38dd678a21582e03ecd2dec76ccf8290455628a.tar.gz qemu-b38dd678a21582e03ecd2dec76ccf8290455628a.tar.xz qemu-b38dd678a21582e03ecd2dec76ccf8290455628a.zip | |
qapi: Add qobject_is_equal()
This generic function (along with its implementations for different
types) determines whether two QObjects are equal.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-id: 20171114180128.17076-4-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'qobject/qdict.c')
| -rw-r--r-- | qobject/qdict.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/qobject/qdict.c b/qobject/qdict.c index 576018e531..e8f15f1132 100644 --- a/qobject/qdict.c +++ b/qobject/qdict.c @@ -403,6 +403,35 @@ void qdict_del(QDict *qdict, const char *key) } /** + * qdict_is_equal(): Test whether the two QDicts are equal + * + * Here, equality means whether they contain the same keys and whether + * the respective values are in turn equal (i.e. invoking + * qobject_is_equal() on them yields true). + */ +bool qdict_is_equal(const QObject *x, const QObject *y) +{ + const QDict *dict_x = qobject_to_qdict(x); + const QDict *dict_y = qobject_to_qdict(y); + const QDictEntry *e; + + if (qdict_size(dict_x) != qdict_size(dict_y)) { + return false; + } + + for (e = qdict_first(dict_x); e; e = qdict_next(dict_x, e)) { + const QObject *obj_x = qdict_entry_value(e); + const QObject *obj_y = qdict_get(dict_y, qdict_entry_key(e)); + + if (!qobject_is_equal(obj_x, obj_y)) { + return false; + } + } + + return true; +} + +/** * qdict_destroy_obj(): Free all the memory allocated by a QDict */ void qdict_destroy_obj(QObject *obj) |
