]> git.proxmox.com Git - mirror_qemu.git/blobdiff - qobject/qdict.c
qapi: Add qobject_is_equal()
[mirror_qemu.git] / qobject / qdict.c
index 576018e5314e74b184210c0d018baa2a8af9db12..e8f15f113244293e3a37c2530883c920865e8a45 100644 (file)
@@ -402,6 +402,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
  */