|
@@ -18,29 +18,6 @@
|
|
#include "qapi/qmp/qlit.h"
|
|
#include "qapi/qmp/qlit.h"
|
|
#include "qapi/qmp/types.h"
|
|
#include "qapi/qmp/types.h"
|
|
|
|
|
|
-typedef struct QListCompareHelper {
|
|
|
|
- int index;
|
|
|
|
- QLitObject *objs;
|
|
|
|
- bool result;
|
|
|
|
-} QListCompareHelper;
|
|
|
|
-
|
|
|
|
-static void compare_helper(QObject *obj, void *opaque)
|
|
|
|
-{
|
|
|
|
- QListCompareHelper *helper = opaque;
|
|
|
|
-
|
|
|
|
- if (!helper->result) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (helper->objs[helper->index].type == QTYPE_NONE) {
|
|
|
|
- helper->result = false;
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- helper->result =
|
|
|
|
- qlit_equal_qobject(&helper->objs[helper->index++], obj);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static bool qlit_equal_qdict(const QLitObject *lhs, const QDict *qdict)
|
|
static bool qlit_equal_qdict(const QLitObject *lhs, const QDict *qdict)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
@@ -62,6 +39,23 @@ static bool qlit_equal_qdict(const QLitObject *lhs, const QDict *qdict)
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static bool qlit_equal_qlist(const QLitObject *lhs, const QList *qlist)
|
|
|
|
+{
|
|
|
|
+ QListEntry *e;
|
|
|
|
+ int i = 0;
|
|
|
|
+
|
|
|
|
+ QLIST_FOREACH_ENTRY(qlist, e) {
|
|
|
|
+ QObject *obj = qlist_entry_obj(e);
|
|
|
|
+
|
|
|
|
+ if (!qlit_equal_qobject(&lhs->value.qlist[i], obj)) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ i++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return !e && lhs->value.qlist[i].type == QTYPE_NONE;
|
|
|
|
+}
|
|
|
|
+
|
|
bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs)
|
|
bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs)
|
|
{
|
|
{
|
|
if (!rhs || lhs->type != qobject_type(rhs)) {
|
|
if (!rhs || lhs->type != qobject_type(rhs)) {
|
|
@@ -78,17 +72,8 @@ bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs)
|
|
qstring_get_str(qobject_to_qstring(rhs))) == 0);
|
|
qstring_get_str(qobject_to_qstring(rhs))) == 0);
|
|
case QTYPE_QDICT:
|
|
case QTYPE_QDICT:
|
|
return qlit_equal_qdict(lhs, qobject_to_qdict(rhs));
|
|
return qlit_equal_qdict(lhs, qobject_to_qdict(rhs));
|
|
- case QTYPE_QLIST: {
|
|
|
|
- QListCompareHelper helper;
|
|
|
|
-
|
|
|
|
- helper.index = 0;
|
|
|
|
- helper.objs = lhs->value.qlist;
|
|
|
|
- helper.result = true;
|
|
|
|
-
|
|
|
|
- qlist_iter(qobject_to_qlist(rhs), compare_helper, &helper);
|
|
|
|
-
|
|
|
|
- return helper.result;
|
|
|
|
- }
|
|
|
|
|
|
+ case QTYPE_QLIST:
|
|
|
|
+ return qlit_equal_qlist(lhs, qobject_to_qlist(rhs));
|
|
case QTYPE_QNULL:
|
|
case QTYPE_QNULL:
|
|
return true;
|
|
return true;
|
|
default:
|
|
default:
|