Mercurial > wgsdk
annotate include/json.h @ 12:dd427b7cc459 default tip
json: replace with nxjson library
more lightweight, reduces the binary size by about 40 kb
| author | Paper <paper@paper.us.eu.org> | 
|---|---|
| date | Fri, 15 Mar 2024 20:46:18 -0400 | 
| parents | e6a594f16403 | 
| children | 
| rev | line source | 
|---|---|
| 11 | 1 /* | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 2 * Copyright (c) 2013 Yaroslav Stavnichiy <yarosla@gmail.com> | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 3 * | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 4 * This file is part of NXJSON. | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 5 * | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 6 * NXJSON is free software: you can redistribute it and/or modify | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 7 * it under the terms of the GNU Lesser General Public License | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 8 * as published by the Free Software Foundation, either version 3 | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 9 * of the License, or (at your option) any later version. | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 10 * | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 11 * NXJSON is distributed in the hope that it will be useful, | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 14 * GNU Lesser General Public License for more details. | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 15 * | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 16 * You should have received a copy of the GNU Lesser General Public | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 17 * License along with NXJSON. If not, see <http://www.gnu.org/licenses/>. | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 18 */ | 
| 11 | 19 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 20 #ifndef NXJSON_H | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 21 #define NXJSON_H | 
| 11 | 22 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 23 #ifdef __cplusplus | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 24 extern "C" { | 
| 11 | 25 #endif | 
| 26 | |
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 27 #ifndef NXJSON_TYPE_U64 | 
| 11 | 28 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 29 #include <stdint.h> | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 30 | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 31 typedef uint64_t nxjson_u64; | 
| 11 | 32 #endif | 
| 33 | |
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 34 #ifndef NXJSON_TYPE_S64 | 
| 11 | 35 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 36 #include <stdint.h> | 
| 11 | 37 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 38 typedef uint64_t nxjson_s64; | 
| 11 | 39 #endif | 
| 40 | |
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 41 typedef enum nx_json_type { | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 42 NX_JSON_NULL, // this is null value | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 43 NX_JSON_OBJECT, // this is an object; properties can be found in child nodes | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 44 NX_JSON_ARRAY, // this is an array; items can be found in child nodes | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 45 NX_JSON_STRING, // this is a string; value can be found in text_value field | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 46 NX_JSON_INTEGER, // this is an integer; value can be found in int_value field | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 47 NX_JSON_DOUBLE, // this is a double; value can be found in dbl_value field | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 48 NX_JSON_BOOL // this is a boolean; value can be found in int_value field | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 49 } nx_json_type; | 
| 11 | 50 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 51 typedef struct nx_json { | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 52 nx_json_type type; // type of json node, see above | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 53 const char *key; // key of the property; for object's children only | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 54 union { | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 55 const char *text_value; // text value of STRING node | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 56 struct { | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 57 union { | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 58 nxjson_u64 u_value; // the value of INTEGER or BOOL node | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 59 nxjson_s64 s_value; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 60 }; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 61 double dbl_value; // the value of DOUBLE node | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 62 } num; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 63 struct { // children of OBJECT or ARRAY | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 64 int length; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 65 struct nx_json *first; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 66 struct nx_json *last; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 67 } children; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 68 }; | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 69 struct nx_json *next; // points to next child | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 70 } nx_json; | 
| 11 | 71 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 72 typedef int (*nx_json_unicode_encoder)(unsigned int codepoint, char *p, char **endp); | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 73 | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 74 extern nx_json_unicode_encoder nx_json_unicode_to_utf8; | 
| 11 | 75 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 76 const nx_json *nx_json_parse(char *text, nx_json_unicode_encoder encoder); | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 77 | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 78 const nx_json *nx_json_parse_utf8(char *text); | 
| 11 | 79 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 80 void nx_json_free(const nx_json *js); | 
| 11 | 81 | 
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 82 const nx_json *nx_json_get(const nx_json *json, const char *key); // get object's property by key | 
| 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 83 const nx_json *nx_json_item(const nx_json *json, int idx); // get array element by index | 
| 11 | 84 | 
| 85 | |
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 86 #ifdef __cplusplus | 
| 11 | 87 } | 
| 88 #endif | |
| 89 | |
| 12 
dd427b7cc459
json: replace with nxjson library
 Paper <paper@paper.us.eu.org> parents: 
11diff
changeset | 90 #endif /* NXJSON_H */ | 
