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:
Max Reitz 2017-11-14 19:01:25 +01:00
parent 254bf807e5
commit b38dd678a2
14 changed files with 186 additions and 0 deletions

View file

@ -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
*/