mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-07-04 19:38:19 +00:00
qobject: Explain how QNum works, and why
Backports commit f90cb2846a0b167d47131ba4600dcc816bccb1c6 from qemu
This commit is contained in:
parent
9d412ac4b3
commit
e1a055bd73
|
@ -23,6 +23,27 @@ typedef enum {
|
||||||
QNUM_DOUBLE
|
QNUM_DOUBLE
|
||||||
} QNumKind;
|
} 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.
|
||||||
|
*/
|
||||||
struct QNum {
|
struct QNum {
|
||||||
QObject base;
|
QObject base;
|
||||||
QNumKind kind;
|
QNumKind kind;
|
||||||
|
|
Loading…
Reference in a new issue