why does the int_value of the pa_json_object structure need to be declared as int64_t?

Arun Raghavan arun at arunraghavan.net
Mon Jul 8 19:44:32 UTC 2024


On Mon, 8 Jul 2024, at 3:41 AM, 赵成义 wrote:
> Hi guys,
>
> Please help explain why the int_value of the pa_json_object structure 
> needs to be declared as int64_t.

I picked an int64_t because JSON does not specify a number precision, and I wanted to get the largest representation we could without having to actually resort to arbitrary precision integers.

> ./src/pulsecore/json.c:
>
> struct pa_json_object {
>     pa_json_type type;
>
>     union {
>         int64_t int_value;
>         double double_value;
>         bool bool_value;
>         char *string_value;
>         pa_hashmap *object_values; /* name -> object */
>         pa_idxset *array_values; /* objects */
>     };
> };
>
> Can I change "int64_t int_value;" to "int int_value;"?
> In the ./src/pulse/format.c file, the function pa_json_object_get_int
> is called multiple times, converting int64_t to int.

Can you share a rationale for wanting to do this? On 64-bit systems, this conversion is a no-op, anyway, and on 32-bit systems I would expect the overhead to be minimal.

-- Arun


More information about the pulseaudio-discuss mailing list