[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 04/19] qnum: qnum_value_is_equal() function
From: |
Eduardo Habkost |
Subject: |
[PATCH v3 04/19] qnum: qnum_value_is_equal() function |
Date: |
Mon, 23 Nov 2020 14:48:03 -0500 |
Extract the QNum value comparison logic to a function that takes
QNumValue* as argument.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v2 -> v3:
* Rename function parameters to val_x/val_y
* Insert blank line after variable declarations at
qnum_is_equal()
---
include/qapi/qmp/qnum.h | 1 +
qobject/qnum.c | 24 ++++++++++++++++--------
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/include/qapi/qmp/qnum.h b/include/qapi/qmp/qnum.h
index 03193dca20..3dcb020689 100644
--- a/include/qapi/qmp/qnum.h
+++ b/include/qapi/qmp/qnum.h
@@ -87,6 +87,7 @@ double qnum_get_double(const QNum *qn);
char *qnum_to_string(QNum *qn);
+bool qnum_value_is_equal(const QNumValue *val_x, const QNumValue *val_y);
bool qnum_is_equal(const QObject *x, const QObject *y);
void qnum_destroy_obj(QObject *obj);
diff --git a/qobject/qnum.c b/qobject/qnum.c
index 94e668db60..53c637f46d 100644
--- a/qobject/qnum.c
+++ b/qobject/qnum.c
@@ -202,7 +202,7 @@ char *qnum_to_string(QNum *qn)
}
/**
- * qnum_is_equal(): Test whether the two QNums are equal
+ * qnum_value_is_equal(): Test whether two QNumValues are equal
*
* Negative integers are never considered equal to unsigned integers,
* but positive integers in the range [0, INT64_MAX] are considered
@@ -210,13 +210,8 @@ char *qnum_to_string(QNum *qn)
*
* Doubles are never considered equal to integers.
*/
-bool qnum_is_equal(const QObject *x, const QObject *y)
+bool qnum_value_is_equal(const QNumValue *val_x, const QNumValue *val_y)
{
- const QNum *num_x = qobject_to(QNum, x);
- const QNum *num_y = qobject_to(QNum, y);
- const QNumValue *val_x = &num_x->value;
- const QNumValue *val_y = &num_y->value;
-
switch (val_x->kind) {
case QNUM_I64:
switch (val_y->kind) {
@@ -234,7 +229,7 @@ bool qnum_is_equal(const QObject *x, const QObject *y)
case QNUM_U64:
switch (val_y->kind) {
case QNUM_I64:
- return qnum_is_equal(y, x);
+ return qnum_value_is_equal(val_y, val_x);
case QNUM_U64:
/* Comparison in native uint64_t type */
return val_x->u.u64 == val_y->u.u64;
@@ -257,6 +252,19 @@ bool qnum_is_equal(const QObject *x, const QObject *y)
abort();
}
+/**
+ * qnum_is_equal(): Test whether the two QNums are equal
+ *
+ * See qnum_value_is_equal() for details on the comparison rules.
+ */
+bool qnum_is_equal(const QObject *x, const QObject *y)
+{
+ const QNum *qnum_x = qobject_to(QNum, x);
+ const QNum *qnum_y = qobject_to(QNum, y);
+
+ return qnum_value_is_equal(&qnum_x->value, &qnum_y->value);
+}
+
/**
* qnum_destroy_obj(): Free all memory allocated by a
* QNum object
--
2.28.0
- [PATCH v3 00/19] qom: Use qlit to represent property defaults, Eduardo Habkost, 2020/11/23
- [PATCH v3 01/19] qnum: Make qnum_get_double() get const pointer, Eduardo Habkost, 2020/11/23
- [PATCH v3 02/19] qnum: Make num_x/num_y variables at qnum_is_equal() const, Eduardo Habkost, 2020/11/23
- [PATCH v3 04/19] qnum: qnum_value_is_equal() function,
Eduardo Habkost <=
- [PATCH v3 07/19] qlit: Use QNumValue to represent QNums, Eduardo Habkost, 2020/11/23
- [PATCH v3 05/19] qlit: Use qnum_value_is_equal() when comparing QNums, Eduardo Habkost, 2020/11/23
- [PATCH v3 03/19] qnum: QNumValue type for QNum value literals, Eduardo Habkost, 2020/11/23
- [PATCH v3 06/19] qlit: Rename QLIT_QNUM to QLIT_QNUM_INT, Eduardo Habkost, 2020/11/23
- [PATCH v3 10/19] qlit: Support all types of QNums, Eduardo Habkost, 2020/11/23
[PATCH v3 09/19] qlit: Add more test literals to qlit_equal_qobject() test case, Eduardo Habkost, 2020/11/23