-
Notifications
You must be signed in to change notification settings - Fork 0
/
JSONOptions.h
360 lines (269 loc) · 11.9 KB
/
JSONOptions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
#ifndef JSON_OPTIONS_H
#define JSON_OPTIONS_H
/**
* This file holds all of the compiling options for easy access and so
* that you don't have to remember them, or look them up all the time
*/
/*
* JSON_LIBRARY must be declared if libjson is compiled as a static or dynamic
* library. This exposes a C-style interface, but none of the inner workings of libjson
*/
#define JSON_LIBRARY
/*
* JSON_STRICT removes all of libjson's extensions. Meaning no comments, no special numbers
*/
//#define JSON_STRICT
/*
* JSON_DEBUG is used to perform extra error checking. Because libjson usually
* does on the fly parsing, validation is impossible, so this option will allow
* you to register an error callback so that you can record what is going wrong
* before the library crashes. This option does not protect from these errors,
* it simply tells you about them, which is nice for debugging, but not preferable
* for release candidates
*/
//#define JSON_DEBUG
/*
* JSON_ISO_STRICT turns off all code that uses non-standard C++. This removes all
* references to long long and long double as well as a few others
*/
//#define JSON_ISO_STRICT
/*
* JSON_SAFE performs similarly to JSON_DEBUG, except this option does protect
* from the errors that it encounters. This option is recommended for those who
* feel it's possible for their program to encounter invalid json.
*/
#define JSON_SAFE
/*
* JSON_STDERROR routes error messages to cerr instead of a callback, this
* option hides the callback registering function. This will usually display
* messages in the console
*/
//#define JSON_STDERROR
/*
* JSON_PREPARSE causes all parsing to be done immediately. By default, libjson
* parses nodes on the fly as they are needed, this makes parsing much faster if
* your program gets a lot of information that it doesn't need. An example of
* this would be a client application communicating with a server if the server
* returns things like last modified date and other things that you don't use.
*/
#define JSON_PREPARSE
/*
* JSON_LESS_MEMORY will force libjson to let go of memory as quickly as it can
* this is recommended for software that has to run on less than optimal machines.
* It will cut libjson's memory usage by about 20%, but also run slightly slower.
* It's recommended that you also compile using the -Os option, as this will also
* reduce the size of the library
*/
//#define JSON_LESS_MEMORY
/*
* JSON_UNICODE tells libjson to use wstrings instead of regular strings, this
* means that libjson supports the full array of unicode characters, but also takes
* much more memory and processing power.
*/
//#define JSON_UNICODE
/*
* JSON_REF_COUNT causes libjson to reference count JSONNodes, which makes copying
* and passing them around much faster. It is recommended that this stay on for
* most uses
*/
#define JSON_REF_COUNT
/*
* JSON_BINARY is used to support binary, which is base64 encoded and decoded by libjson,
* if this option is not turned off, no base64 support is included
*/
#define JSON_BINARY
/*
* JSON_EXPOSE_BASE64 is used to turn on the functionality of libjson's base64 encoding
* and decoding. This may be useful if you want to obfuscate your json, or send binary data over
* a network
*/
#define JSON_EXPOSE_BASE64
/*
* JSON_ITERATORS turns on all of libjson's iterating functionality. This would usually
* only be turned off while compiling for use with C
*/
#define JSON_ITERATORS
/*
* JSON_STREAM turns on libjson's streaming functionality. This allows you to give parts of
* your json into a stream, which will automatically hit a callback when full nodes are
* completed
*/
#define JSON_STREAM
/*
* JSON_MEMORY_CALLBACKS exposes functions to register callbacks for allocating, resizing,
* and freeing memory. Because libjson is designed for customizability, it is feasible
* that some users would like to further add speed by having the library utilize a memory
* pool. With this option turned on, the default behavior is still done internally unless
* a callback is registered. So you can have this option on and not use it.
*/
//#define JSON_MEMORY_CALLBACKS
/*
* JSON_MEMORY_MANAGE is used to create functionality to automatically track and clean
* up memory that has been allocated by the user. This includes strings, binary data, and
* nodes. It also exposes bulk delete functions.
*/
#define JSON_MEMORY_MANAGE
/*
* JSON_MEMORY_POOL Turns on libjson's iteraction with mempool++. It is more efficient that simply
* connecting mempool++ to the callbacks because it integrates things internally and uses a number
* of memory pools. This value tells libjson how large of a memory pool to start out with. 500KB
* should suffice for most cases. libjson will distribute that within the pool for the best
* performance depending on other settings.
*/
//#define JSON_MEMORY_POOL 524288
/*
* JSON_MUTEX_CALLBACKS exposes functions to register callbacks to lock and unlock
* mutexs and functions to lock and unlock JSONNodes and all of it's children. This
* does not prevent other threads from accessing the node, but will prevent them from
* locking it. It is much easier for the end programmer to allow libjson to manage
* your mutexs because of reference counting and manipulating trees, libjson automatically
* tracks mutex controls for you, so you only ever lock what you need to
*/
//#define JSON_MUTEX_CALLBACKS
/*
* JSON_MUTEX_MANAGE lets you set mutexes and forget them, libjson will not only keep
* track of the mutex, but also keep a count of how many nodes are using it, and delete
* it when there are no more references
*/
//#define JSON_MUTEX_MANAGE
/*
* JSON_NO_C_CONSTS removes consts from the C interface. It still acts the same way, but
* this may be useful for using the header with languages or variants that don't have const
*/
//#define JSON_NO_C_CONSTS
/*
* JSON_OCTAL allows libjson to use octal values in numbers.
*/
//#define JSON_OCTAL
/*
* JSON_WRITE_PRIORITY turns on libjson's writing capabilties. Without this libjson can only
* read and parse json, this allows it to write back out. Changing the value of the writer
* changes how libjson compiles, and how fast it will go when writing
*/
#define JSON_WRITE_PRIORITY MED
/*
* JSON_READ_PRIORITY turns on libjson's reading capabilties. Changing the value of the reader
* changes how libjson compiles, and how fast it will go when writing
*/
#define JSON_READ_PRIORITY HIGH
/*
* JSON_NEWLINE affects how libjson writes. If this option is turned on, libjson
* will use whatever it's defined as for the newline signifier, otherwise, it will use
* standard unix \n.
*/
//#define JSON_NEWLINE "\r\n" //\r\n is standard for most windows and dos programs
/*
* JSON_INDENT affects how libjson writes. If this option is turned on, libjson
* will use \t to indent formatted json, otherwise it will use the number of characters
* that you specify. If this is not turned on, then it will use the tab (\t) character
*/
//#define JSON_INDENT " "
/*
* JSON_ESCAPE_WRITES tells the libjson engine to escape special characters when it writes
* out. If this option is turned off, the json it outputs may not adhere to JSON standards
*/
#define JSON_ESCAPE_WRITES
/*
* JSON_COMMENTS tells libjson to store and write comments. libjson always supports
* parsing json that has comments in it as it simply ignores them, but with this option
* it keeps the comments and allows you to insert further comments
*/
#define JSON_COMMENTS
/*
* JSON_WRITE_BASH_COMMENTS will cause libjson to write all comments in bash (#) style
* if this option is not turned on, then it will use C-style comments. Bash comments are
* all single line
*/
//#define JSON_WRITE_BASH_COMMENTS
/*
* JSON_WRITE_SINGLE_LINE_COMMENTS will cause libjson to write all comments in using //
* notation, or (#) if that option is on. Some parsers do not support multiline C comments
* although, this option is not needed for bash comments, as they are all single line anyway
*/
//#define JSON_WRITE_SINGLE_LINE_COMMENTS
/*
* JSON_ARRAY_SIZE_ON_ON_LINE allows you to put small arrays of primitives all on one line
* in a write_formatted. This is common for tuples, like coordinates. If must be defined
* as an integer
*/
//#define JSON_ARRAY_SIZE_ON_ONE_LINE 2
/*
* JSON_VALIDATE turns on validation features of libjson.
*/
#define JSON_VALIDATE
/*
* JSON_CASE_INSENSITIVE_FUNCTIONS turns on funtions for finding child nodes in a case-
* insenititve way
*/
#define JSON_CASE_INSENSITIVE_FUNCTIONS
/*
* JSON_INDEX_TYPE allows you th change the size type for the children functions. If this
* option is not used then unsigned int is used. This option is useful for cutting down
* on memory, or using huge numbers of child nodes (over 4 billion)
*/
#define JSON_INDEX_TYPE unsigned int
/*
* JSON_BOOL_TYPE lets you change the bool type for the C interface. Because before C99 there
* was no bool, and even then it's just a typedef, you may want to use something else. If this
* is not defined, it will revert to int
*/
//#define JSON_BOOL_TYPE char
/*
* JSON_INT_TYPE lets you change the int type for as_int. If you ommit this option, the default
* long will be used
*/
//#define JSON_INT_TYPE long
/*
* JSON_NUMBER_TYPE lets you change the number type for as_float as well as the internal storage for the
* number. If you omit this option, the default double will be used for most cases and float for JSON_LESS_MEMORY
*/
//#define JSON_NUMBER_TYPE double
/*
* JSON_STRING_HEADER allows you to change the type of string that libjson uses both for the
* interface and internally. It must implement most of the STL string interface, but not all
* of it. Things like wxString or QString should wourk without much trouble
*/
//#define JSON_STRING_HEADER "../TestSuite/StringTest.h"
/*
* JSON_UNIT_TEST is used to maintain and debug the libjson. It makes all private
* members and functions public so that tests can do checks of the inner workings
* of libjson. This should not be turned on by end users.
*/
//#define JSON_UNIT_TEST
/*
* JSON_NO_EXCEPTIONS turns off any exception throwing by the library. It may still use exceptions
* internally, but the interface will never throw anything.
*/
//#define JSON_NO_EXCEPTIONS
/*
* JSON_DEPRECATED_FUNCTIONS turns on functions that have been deprecated, this is for backwards
* compatibility between major releases. It is highly recommended that you move your functions
* over to the new equivalents
*/
//#define JSON_DEPRECATED_FUNCTIONS
/*
* JSON_CASTABLE allows you to call as_bool on a number and have it do the 0 or not 0 check,
* it also allows you to ask for a string from a number, or boolean, and have it return the right thing.
* Without this option, those types of requests are undefined. It also exposes the as_array, as_node, and cast
* functions
*/
#define JSON_CASTABLE
/*
* JSON_SECURITY_MAX_NEST_LEVEL is a security measure added to make prevent against DoS attacks
* This only affects validation, as if you are worried about security attacks, then you are
* most certainly validating json before sending it to be parsed. This option allows you to limitl how many
* levels deep a JSON Node can go. 128 is a good depth to start with
*/
#define JSON_SECURITY_MAX_NEST_LEVEL 128
/*
* JSON_SECURITY_MAX_STRING_LENGTH is another security measure, preventing DoS attacks with very long
* strings of JSON. 32MB is the default value for this, this allows large images to be embedded
*/
#define JSON_SECURITY_MAX_STRING_LENGTH 33554432
/*
* JSON_SECURITY_MAX_STREAM_OBJECTS is a security measure for streams. It prevents DoS attacks with
* large number of objects hitting the stream all at once. 128 is a lot of objects, but not out of
* the question for high speed systems.
*/
#define JSON_SECURITY_MAX_STREAM_OBJECTS 128
#endif