On 07/03/2017 07:25 AM, Max Reitz wrote: > This generic function (along with its implementations for different > types) determines whether two QObjects are equal. > > Signed-off-by: Max Reitz <[email protected]> > ---
> +++ b/qobject/qnum.c
> + case QNUM_DOUBLE:
> + switch (num_y->kind) {
> + case QNUM_I64:
> + return qnum_is_equal(y, x);
> + case QNUM_U64:
> + return qnum_is_equal(y, x);
> + case QNUM_DOUBLE:
> + /* Comparison in native double type */
> + return num_x->u.dbl == num_y->u.dbl;
Which returns false if we allow NaN (in general, JSON does not, so I'm
not sure if we allow NaN in a QNum)
> +++ b/qobject/qobject.c
> +bool qobject_is_equal(const QObject *x, const QObject *y)
> +{
> + /* We cannot test x == y because an object does not need to be
> + * equal to itself (e.g. NaN floats are not). */
But this comment matches the code above in QNum.
> +
> + if (!x && !y) {
> + return true;
> + }
> +
> + if (!x || !y || x->type != y->type) {
> + return false;
> + }
I like that there is no implicit conversion between bool and int; the
only conversions that still allow equality are within the subtypes of QNum.
Reviewed-by: Eric Blake <[email protected]>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature
