提交 f90cb284 编写于 作者: M Markus Armbruster

qobject: Explain how QNum works, and why

Suggested-by: NMax Reitz <mreitz@redhat.com>
Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
Message-Id: <1503384739-17207-1-git-send-email-armbru@redhat.com>
Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
[Comment typos fixed]
上级 e4a426e7
......@@ -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 as 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 fits 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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册