mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
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>
This commit is contained in:
parent
254bf807e5
commit
b38dd678a2
14 changed files with 186 additions and 0 deletions
|
@ -139,6 +139,38 @@ QList *qobject_to_qlist(const QObject *obj)
|
|||
return container_of(obj, QList, base);
|
||||
}
|
||||
|
||||
/**
|
||||
* qlist_is_equal(): Test whether the two QLists are equal
|
||||
*
|
||||
* In order to be considered equal, the respective two objects at each
|
||||
* index of the two lists have to compare equal (regarding
|
||||
* qobject_is_equal()), and both lists have to have the same number of
|
||||
* elements.
|
||||
* That means both lists have to contain equal objects in equal order.
|
||||
*/
|
||||
bool qlist_is_equal(const QObject *x, const QObject *y)
|
||||
{
|
||||
const QList *list_x = qobject_to_qlist(x);
|
||||
const QList *list_y = qobject_to_qlist(y);
|
||||
const QListEntry *entry_x, *entry_y;
|
||||
|
||||
entry_x = qlist_first(list_x);
|
||||
entry_y = qlist_first(list_y);
|
||||
|
||||
while (entry_x && entry_y) {
|
||||
if (!qobject_is_equal(qlist_entry_obj(entry_x),
|
||||
qlist_entry_obj(entry_y)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
entry_x = qlist_next(entry_x);
|
||||
entry_y = qlist_next(entry_y);
|
||||
}
|
||||
|
||||
return !entry_x && !entry_y;
|
||||
}
|
||||
|
||||
/**
|
||||
* qlist_destroy_obj(): Free all the memory allocated by a QList
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue