u_json: Add array helper.

This commit is contained in:
Ryan Pavlik authored and Jakob Bornecrantz committed 2020-01-24 21:42:43 +00:00
1 parent b3e84f9041
commit 798fa623ea
2 files changed
+60 -2

No files matched your search

+40 -1
View File
@@ -1,10 +1,49 @@
// Copyright 2019, Collabora, Ltd.
// Copyright 2019-2020, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
/*!
* @file
* @brief Tiny JSON wrapper around cJSON.
* @author Jakob Bornecrantz <jakob@collabora.com>
* @author Ryan Pavlik <ryan.pavlik@collabora.com>
* @ingroup aux_util
*/
#include "u_json.h"
#include "cjson/cJSON.c"
size_t
u_json_get_double_array(const cJSON *json_array,
double *out_array,
size_t max_size)
{
if (!json_array) {
return 0;
}
if (!out_array) {
return 0;
}
if (!cJSON_IsArray(json_array)) {
return 0;
}
if (max_size == 0) {
return 0;
}
size_t i = 0;
const cJSON *elt;
cJSON_ArrayForEach(elt, json_array)
{
if (!cJSON_IsNumber(elt)) {
fprintf(stderr,
"warning: u_json_get_double_array got a "
"non-number in a numeric array");
return i;
}
out_array[i] = elt->valuedouble;
++i;
if (i == max_size) {
break;
}
}
return i;
}
+20 -1
View File
@@ -1,9 +1,10 @@
// Copyright 2019, Collabora, Ltd.
// Copyright 2019-2020, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
/*!
* @file
* @brief Tiny JSON wrapper around cJSON header.
* @author Jakob Bornecrantz <jakob@collabora.com>
* @author Ryan Pavlik <ryan.pavlik@collabora.com>
* @ingroup aux_util
*/
@@ -12,3 +13,21 @@
#include "xrt/xrt_compiler.h"
#include "cjson/cJSON.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/*!
* @brief Parse up to max_size doubles from a JSON array.
*
* @return the number of elements set.
*/
size_t
u_json_get_double_array(const cJSON *json_array,
double *out_array,
size_t max_size);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus