Suggested-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
include/qapi/qmp/qnum.h | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/include/qapi/qmp/qnum.h b/include/qapi/qmp/qnum.h
index 09d745c..9182129 100644
--- a/include/qapi/qmp/qnum.h
+++ b/include/qapi/qmp/qnum.h
@@ -23,6 +23,27 @@ typedef enum {
QNUM_DOUBLE
} QNumKind;
+/*
+ * QNum encapsulates how our dialect of JSON fills in the blanks left
+ * by the JSON specification (RFC 7159) regarding numbers.
+ *
+ * Conceptually, we treat number as an abstract type with three
+ * concrete subtypes: floating-point, signed integer, unsigned
+ * integer. QNum implements this a discriminated union of double,
+ * int64_t, uint64_t.
+ *
+ * The JSON parser picks the subtype as follows. If the number has a
+ * decimal point or an exponent, it is floating-point. Else if it
+ * fits into int64_t, it's signed integer. Else if it first into
+ * uint64_t, it's unsigned integer. Else it's floating-point.
+ *
+ * Any number can serve as double: qnum_get_double() converts under
+ * the hood.
+ *
+ * An integer can serve as signed / unsigned integer as long as it is
+ * in range: qnum_get_try_int() / qnum_get_try_uint() check range and
+ * convert under the hood.
+ */
typedef struct QNum {
QObject base;
QNumKind kind;
--
2.7.5
----- Original Message ----- > Suggested-by: Max Reitz <mreitz@redhat.com> > Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > include/qapi/qmp/qnum.h | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/include/qapi/qmp/qnum.h b/include/qapi/qmp/qnum.h > index 09d745c..9182129 100644 > --- a/include/qapi/qmp/qnum.h > +++ b/include/qapi/qmp/qnum.h > @@ -23,6 +23,27 @@ typedef enum { > QNUM_DOUBLE > } QNumKind; > > +/* > + * QNum encapsulates how our dialect of JSON fills in the blanks left > + * by the JSON specification (RFC 7159) regarding numbers. > + * > + * Conceptually, we treat number as an abstract type with three > + * concrete subtypes: floating-point, signed integer, unsigned > + * integer. QNum implements this a discriminated union of double, > + * int64_t, uint64_t. > + * > + * The JSON parser picks the subtype as follows. If the number has a > + * decimal point or an exponent, it is floating-point. Else if it > + * fits into int64_t, it's signed integer. Else if it first into > + * uint64_t, it's unsigned integer. Else it's floating-point. > + * > + * Any number can serve as double: qnum_get_double() converts under > + * the hood. > + * > + * An integer can serve as signed / unsigned integer as long as it is > + * in range: qnum_get_try_int() / qnum_get_try_uint() check range and > + * convert under the hood. > + */ > typedef struct QNum { > QObject base; > QNumKind kind; > -- > 2.7.5 > >
On 2017-08-22 08:52, Markus Armbruster wrote: > Suggested-by: Max Reitz <mreitz@redhat.com> > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > include/qapi/qmp/qnum.h | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) Thanks again! Reviewed-by: Max Reitz <mreitz@redhat.com>
On 08/22/2017 01:52 AM, Markus Armbruster wrote: > Suggested-by: Max Reitz <mreitz@redhat.com> > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > include/qapi/qmp/qnum.h | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/include/qapi/qmp/qnum.h b/include/qapi/qmp/qnum.h > index 09d745c..9182129 100644 > --- a/include/qapi/qmp/qnum.h > +++ b/include/qapi/qmp/qnum.h > @@ -23,6 +23,27 @@ typedef enum { > QNUM_DOUBLE > } QNumKind; > > +/* > + * QNum encapsulates how our dialect of JSON fills in the blanks left > + * by the JSON specification (RFC 7159) regarding numbers. > + * > + * Conceptually, we treat number as an abstract type with three > + * concrete subtypes: floating-point, signed integer, unsigned > + * integer. QNum implements this a discriminated union of double, s/this/this as/ > + * int64_t, uint64_t. > + * > + * The JSON parser picks the subtype as follows. If the number has a > + * decimal point or an exponent, it is floating-point. Else if it > + * fits into int64_t, it's signed integer. Else if it first into s/first/fits/ > + * uint64_t, it's unsigned integer. Else it's floating-point. > + * > + * Any number can serve as double: qnum_get_double() converts under > + * the hood. > + * > + * An integer can serve as signed / unsigned integer as long as it is > + * in range: qnum_get_try_int() / qnum_get_try_uint() check range and > + * convert under the hood. > + */ > typedef struct QNum { > QObject base; > QNumKind kind; > -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
Eric Blake <eblake@redhat.com> writes: > On 08/22/2017 01:52 AM, Markus Armbruster wrote: >> Suggested-by: Max Reitz <mreitz@redhat.com> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> --- >> include/qapi/qmp/qnum.h | 21 +++++++++++++++++++++ >> 1 file changed, 21 insertions(+) >> >> diff --git a/include/qapi/qmp/qnum.h b/include/qapi/qmp/qnum.h >> index 09d745c..9182129 100644 >> --- a/include/qapi/qmp/qnum.h >> +++ b/include/qapi/qmp/qnum.h >> @@ -23,6 +23,27 @@ typedef enum { >> QNUM_DOUBLE >> } QNumKind; >> >> +/* >> + * QNum encapsulates how our dialect of JSON fills in the blanks left >> + * by the JSON specification (RFC 7159) regarding numbers. >> + * >> + * Conceptually, we treat number as an abstract type with three >> + * concrete subtypes: floating-point, signed integer, unsigned >> + * integer. QNum implements this a discriminated union of double, > > s/this/this as/ > >> + * int64_t, uint64_t. >> + * >> + * The JSON parser picks the subtype as follows. If the number has a >> + * decimal point or an exponent, it is floating-point. Else if it >> + * fits into int64_t, it's signed integer. Else if it first into > > s/first/fits/ > >> + * uint64_t, it's unsigned integer. Else it's floating-point. >> + * >> + * Any number can serve as double: qnum_get_double() converts under >> + * the hood. >> + * >> + * An integer can serve as signed / unsigned integer as long as it is >> + * in range: qnum_get_try_int() / qnum_get_try_uint() check range and >> + * convert under the hood. >> + */ >> typedef struct QNum { >> QObject base; >> QNumKind kind; >> Fixed. Thanks!
© 2016 - 2024 Red Hat, Inc.