1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#ifdef FOSSIL_ENABLE_JSON
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#ifndef CSON_FOSSIL_MODE
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_FOSSIL_MODE
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/* auto-generated! Do not edit! */
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/* begin file include/wh/cson/cson.h */
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if !defined(WANDERINGHORSE_NET_CSON_H_INCLUDED)
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define WANDERINGHORSE_NET_CSON_H_INCLUDED 1
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/*#include <stdint.h> C99: fixed-size int types. */
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#include <stdio.h> /* FILE decl */
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#include <stdarg.h>
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @page page_cson cson JSON API
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson (pronounced "season") is an object-oriented C API for generating
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and consuming JSON (http://www.json.org) data.
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Its main claim to fame is that it can parse JSON from, and output it
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to, damned near anywhere. The i/o routines use a callback function to
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fetch/emit JSON data, allowing clients to easily plug in their own
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
implementations. Implementations are provided for string- and
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
FILE-based i/o.
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Project home page: https://fossil.wanderinghorse.net/r/cson
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Author: Stephan Beal (https://www.wanderinghorse.net/home/stephan/)
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
License: Dual Public Domain/MIT
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The full license text is at the bottom of the main header file
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(cson.h).
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Examples of how to use the library are scattered throughout
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the API documentation, in the test.c file in the source repo,
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and in the wiki on the project's home page.
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if defined(__cplusplus)
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extern "C" {
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if defined(_WIN32) || defined(_WIN64)
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_ENABLE_UNIX 0
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#else
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_ENABLE_UNIX 1
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @typedef some_long_int_type cson_int_t
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Typedef for JSON-like integer types. This is (long long) where feasible,
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
otherwise (long).
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#ifdef _WIN32
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef __int64 cson_int_t;
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_INT_T_SFMT "I64d"
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_INT_T_PFMT "I64d"
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#elif (__STDC_VERSION__ >= 199901L) || (HAVE_LONG_LONG == 1)
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef long long cson_int_t;
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_INT_T_SFMT "lld"
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_INT_T_PFMT "lld"
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#else
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef long cson_int_t;
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_INT_T_SFMT "ld"
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_INT_T_PFMT "ld"
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @typedef double_or_long_double cson_double_t
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This is the type of double value used by the library.
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It is only lightly tested with long double, and when using
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
long double the memory requirements for such values goes
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
up.
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that by default cson uses C-API defaults for numeric
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
precision. To use a custom precision throughout the library, one
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
needs to define the macros CSON_DOUBLE_T_SFMT and/or
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_DOUBLE_T_PFMT macros to include their desired precision, and
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
must build BOTH cson AND the client using these same values. For
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
example:
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_DOUBLE_T_PFMT ".8Lf" // for Modified Julian Day values
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define HAVE_LONG_DOUBLE
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(Only CSON_DOUBLE_T_PFTM should be needed for most
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
purposes.)
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if defined(HAVE_LONG_DOUBLE)
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef long double cson_double_t;
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# ifndef CSON_DOUBLE_T_SFMT
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_DOUBLE_T_SFMT "Lf"
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# endif
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# ifndef CSON_DOUBLE_T_PFMT
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_DOUBLE_T_PFMT "Lf"
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# endif
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#else
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef double cson_double_t;
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# ifndef CSON_DOUBLE_T_SFMT
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_DOUBLE_T_SFMT "f"
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# endif
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# ifndef CSON_DOUBLE_T_PFMT
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_DOUBLE_T_PFMT "f"
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# endif
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @def CSON_VOID_PTR_IS_BIG
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ONLY define this to a true value if you know that
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(sizeof(cson_int_t) <= sizeof(void*))
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If that is the case, cson does not need to dynamically
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
allocate integers. However, enabling this may cause
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
compilation warnings in 32-bit builds even though the code
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
being warned about cannot ever be called. To get around such
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
warnings, when building on a 64-bit environment you can define
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this to 1 to get "big" integer support. HOWEVER, all clients must
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
also use the same value for this macro. If i knew a halfway reliable
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
way to determine this automatically at preprocessor-time, i would
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
automate this. We might be able to do halfway reliably by looking
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for a large INT_MAX value?
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if !defined(CSON_VOID_PTR_IS_BIG)
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/* Largely taken from http://predef.sourceforge.net/prearch.html
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See also: http://poshlib.hookatooka.com/poshlib/trac.cgi/browser/posh.h
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# if defined(_WIN64) || defined(__LP64__)/*gcc*/ \
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|| defined(_M_X64) || defined(__amd64__) || defined(__amd64) \
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|| defined(__x86_64__) || defined(__x86_64) \
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|| defined(__ia64__) || defined(__ia64) || defined(_IA64) || defined(__IA64__) \
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|| defined(_M_IA64) \
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|| defined(__sparc_v9__) || defined(__sparcv9) || defined(_ADDR64) \
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|| defined(__64BIT__)
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_VOID_PTR_IS_BIG 1
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# else
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# define CSON_VOID_PTR_IS_BIG 0
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# endif
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @def CSON_INT_T_SFMT
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
scanf()-compatible format token for cson_int_t.
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @def CSON_INT_T_PFMT
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
printf()-compatible format token for cson_int_t.
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @def CSON_DOUBLE_T_SFMT
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
scanf()-compatible format token for cson_double_t.
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @def CSON_DOUBLE_T_PFMT
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
printf()-compatible format token for cson_double_t.
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Type IDs corresponding to JavaScript/JSON types.
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
These are only in the public API to allow O(1) client-side
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
dispatching based on cson_value types.
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
enum cson_type_id {
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The special "undefined" value constant.
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Its value must be 0 for internal reasons.
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_UNDEF = 0,
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The special "null" value constant.
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_NULL = 1,
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The bool value type.
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_BOOL = 2,
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The integer value type, represented in this library
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by cson_int_t.
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_INTEGER = 3,
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The double value type, represented in this library
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by cson_double_t.
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_DOUBLE = 4,
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** The immutable string type. This library stores strings
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
as immutable UTF8.
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_STRING = 5,
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** The "Array" type. */
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_ARRAY = 6,
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** The "Object" type. */
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_TYPE_OBJECT = 7
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Convenience typedef.
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef enum cson_type_id cson_type_id;
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Convenience typedef.
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_value cson_value;
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @struct cson_value
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The core value type of this API. It is opaque to clients, and
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
only the cson public API should be used for setting or
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
inspecting their values.
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This class is opaque because stack-based usage can easily cause
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
leaks if one does not intimately understand the underlying
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
internal memory management (which sometimes changes).
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It is (as of 20110323) legal to insert a given value instance into
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
multiple containers (they will share ownership using reference
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
counting) as long as those insertions do not cause cycles. However,
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
be very aware that such value re-use uses a reference to the
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
original copy, meaning that if its value is changed once, it is
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
changed everywhere. Also beware that multi-threaded write
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
operations on such references leads to undefined behaviour.
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
PLEASE read the ACHTUNGEN below...
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ACHTUNG #1:
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_values MUST NOT form cycles (e.g. via object or array
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entries).
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Not abiding th Holy Law Of No Cycles will lead to double-frees and
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the like (i.e. undefined behaviour, likely crashes due to infinite
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
recursion or stepping on invalid (freed) pointers).
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ACHTUNG #2:
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ALL cson_values returned as non-const cson_value pointers from any
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
public functions in the cson API are to be treated as if they are
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
heap-allocated, and MUST be freed by client by doing ONE of:
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Passing it to cson_value_free().
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Adding it to an Object or Array, in which case the object/array
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
takes over ownership. As of 20110323, a value may be inserted into
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a single container multiple times, or into multiple containers,
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in which case they all share ownership (via reference counting)
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of the original value (meaning any changes to it are visible in
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
all references to it).
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Each call to cson_value_new_xxx() MUST eventually be followed up
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by one of those options.
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Some cson_value_new_XXX() implementations do not actually allocate
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
memory, but this is an internal implementation detail. Client code
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
MUST NOT rely on this behaviour and MUST treat each object
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returned by such a function as if it was a freshly-allocated copy
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(even if their pointer addresses are the same).
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ACHTUNG #3:
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that ACHTUNG #2 tells us that we must always free (or transfer
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ownership of) all pointers returned bycson_value_new_xxx(), but
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
that two calls to (e.g.) cson_value_new_bool(1) will (or might)
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return the same address. The client must not rely on the
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"non-allocation" policy of such special cases, and must pass each
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returned value to cson_value_free(), even if two of them have the
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
same address. Some special values (e.g. null, true, false, integer
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0, double 0.0, and empty strings) use shared copies and in other
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
places reference counting is used internally to figure out when it
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is safe to destroy an object.
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_array()
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_object()
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_string()
289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_integer()
290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_double()
291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_bool()
292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_true()
293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_false()
294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_null()
295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_free()
296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_type_id()
297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @var cson_rc
300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Deprecated: clients are encouraged to use the CSON_RC_xxx values
302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
which correspond to cson_rc.xxx, as those are more efficient. Some
303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
docs and code may still refer to cson_rc, though.
304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This object defines the error codes used by cson.
306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Library routines which return int values almost always return a
308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value from this structure. None of the members in this struct have
309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
published values except for the OK member, which has the value 0.
310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All other values might be incidentally defined where clients
311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
can see them, but the numbers might change from release to
312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
release, so clients should only use the symbolic names.
313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Client code is expected to access these values via the shared
315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_rc object, and use them as demonstrated here:
316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_some_func(...);
319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( 0 == rc ) {...success...}
320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if( cson_rc.ArgError == rc ) { ... some argument was wrong ... }
321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if( cson_rc.AllocError == rc ) { ... allocation error ... }
322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Or with the preferred/newer method:
326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_some_func(...);
329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
switch(rc){
330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case 0: ...success...;
331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case CSON_RC_ArgError: ... some argument was wrong ...
332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case CSON_RC_AllocError: ... allocation error ...
333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The entries named Parse_XXX are generally only returned by
338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_parse() and friends.
339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@deprecated
341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The CSON_RC_xxx values are intended to replace the older
345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_rc.xxx values.
346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
enum cson_rc_values {
348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** The generic success value. Guaranteed to be 0. */
349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_OK = 0,
350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies an error in one or more arguments (e.g. NULL where it is not allowed). */
351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_ArgError,
352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that some argument is not in a valid range. */
353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_RangeError,
354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that some argument is not of the correct logical cson type. */
355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_TypeError,
356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies an input/ouput error. */
357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_IOError,
358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies an out-of-memory error. */
359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_AllocError,
360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that the called code is "NYI" (Not Yet Implemented). */
361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_NYIError,
362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that an internal error was triggered. If it happens, please report this as a bug! */
363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_InternalError,
364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that the called operation is not supported in the
365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
current environment. e.g. missing support from 3rd-party or
366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
platform-specific code.
367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_UnsupportedError,
369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the request resource could not be found.
371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_NotFoundError,
373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies an unknown error, possibly because an underlying
375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3rd-party API produced an error and we have no other reasonable
376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
error code to convert it to.
377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_UnknownError,
379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an unexpected character.
381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_CHAR,
383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid keyword (possibly
385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
an unquoted string).
386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_KEYWORD,
388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid escape sequence.
390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
391
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_ESCAPE_SEQUENCE,
392
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
393
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid Unicode character
394
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
sequence.
395
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
396
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_UNICODE_SEQUENCE,
397
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
398
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid numeric token.
399
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
400
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_NUMBER,
401
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
402
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser reached its maximum defined
403
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parsing depth before finishing the input.
404
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
405
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_NESTING_DEPTH_REACHED,
406
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
407
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an unclosed object or array.
408
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
409
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_UNBALANCED_COLLECTION,
410
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
411
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an key in an unexpected place.
412
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
413
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_EXPECTED_KEY,
414
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
415
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser expected to find a colon but
416
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
found none (e.g. between keys and values in an object).
417
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
418
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_EXPECTED_COLON
419
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
420
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
421
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @struct cson_rc_
422
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See \ref cson_rc for details.
423
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
424
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
static const struct cson_rc_
425
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
426
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** The generic success value. Guaranteed to be 0. */
427
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int OK;
428
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies an error in one or more arguments (e.g. NULL where it is not allowed). */
429
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int ArgError;
430
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that some argument is not in a valid range. */
431
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int RangeError;
432
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that some argument is not of the correct logical cson type. */
433
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int TypeError;
434
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies an input/ouput error. */
435
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int IOError;
436
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies an out-of-memory error. */
437
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int AllocError;
438
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that the called code is "NYI" (Not Yet Implemented). */
439
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int NYIError;
440
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that an internal error was triggered. If it happens, please report this as a bug! */
441
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int InternalError;
442
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signifies that the called operation is not supported in the
443
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
current environment. e.g. missing support from 3rd-party or
444
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
platform-specific code.
445
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
446
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int UnsupportedError;
447
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
448
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the request resource could not be found.
449
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
450
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int NotFoundError;
451
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
452
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies an unknown error, possibly because an underlying
453
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3rd-party API produced an error and we have no other reasonable
454
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
error code to convert it to.
455
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
456
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int UnknownError;
457
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
458
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an unexpected character.
459
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
460
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_INVALID_CHAR;
461
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
462
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid keyword (possibly
463
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
an unquoted string).
464
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
465
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_INVALID_KEYWORD;
466
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
467
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid escape sequence.
468
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
469
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_INVALID_ESCAPE_SEQUENCE;
470
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
471
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid Unicode character
472
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
sequence.
473
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
474
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_INVALID_UNICODE_SEQUENCE;
475
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
476
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an invalid numeric token.
477
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
478
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_INVALID_NUMBER;
479
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
480
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser reached its maximum defined
481
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parsing depth before finishing the input.
482
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
483
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_NESTING_DEPTH_REACHED;
484
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
485
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an unclosed object or array.
486
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
487
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_UNBALANCED_COLLECTION;
488
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
489
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser found an key in an unexpected place.
490
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
491
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_EXPECTED_KEY;
492
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
493
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signifies that the parser expected to find a colon but
494
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
found none (e.g. between keys and values in an object).
495
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
496
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const int Parse_EXPECTED_COLON;
497
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} cson_rc = {
498
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_OK,
499
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_ArgError,
500
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_RangeError,
501
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_TypeError,
502
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_IOError,
503
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_AllocError,
504
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_NYIError,
505
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_InternalError,
506
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_UnsupportedError,
507
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_NotFoundError,
508
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_UnknownError,
509
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_CHAR,
510
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_KEYWORD,
511
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_ESCAPE_SEQUENCE,
512
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_UNICODE_SEQUENCE,
513
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_INVALID_NUMBER,
514
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_NESTING_DEPTH_REACHED,
515
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_UNBALANCED_COLLECTION,
516
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_EXPECTED_KEY,
517
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_Parse_EXPECTED_COLON
518
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
519
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
520
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
521
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the string form of the cson_rc code corresponding to rc, or
522
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
some unspecified, non-NULL string if it is an unknown code.
523
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
524
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The returned bytes are static and do not changing during the
525
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lifetime of the application.
526
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
527
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char const * cson_rc_string(int rc);
528
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
529
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @struct cson_parse_opt
530
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Client-configurable options for the cson_parse() family of
531
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
functions.
532
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
533
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
struct cson_parse_opt
534
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
535
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
536
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Maximum object/array depth to traverse.
537
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
538
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned short maxDepth;
539
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
540
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Whether or not to allow C-style comments. Do not rely on this
541
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
option being available. If the underlying parser is replaced,
542
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this option might no longer be supported.
543
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
544
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char allowComments;
545
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
546
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_parse_opt cson_parse_opt;
547
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
548
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
549
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_parse_opt object.
550
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
551
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define cson_parse_opt_empty_m { 25/*maxDepth*/, 0/*allowComments*/}
552
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
553
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
554
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
555
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A class for holding JSON parser information. It is primarily
556
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
intended for finding the position of a parse error.
557
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
558
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
struct cson_parse_info
559
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
560
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
561
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1-based line number.
562
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
563
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int line;
564
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
565
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0-based column number.
566
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
567
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int col;
568
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
569
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
570
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Length, in bytes.
571
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
572
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int length;
573
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
574
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
575
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Error code of the parse run (0 for no error).
576
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
577
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int errorCode;
578
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
579
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
580
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The total number of object keys successfully processed by the
581
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parser.
582
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
583
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int totalKeyCount;
584
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
585
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
586
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The total number of object/array values successfully processed
587
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by the parser, including the root node.
588
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
589
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int totalValueCount;
590
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
591
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_parse_info cson_parse_info;
592
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
593
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
594
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_parse_info object.
595
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
596
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define cson_parse_info_empty_m {1/*line*/,\
597
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*col*/, \
598
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*length*/, \
599
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*errorCode*/, \
600
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*totalKeyCount*/, \
601
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*totalValueCount*/ \
602
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
603
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
604
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_parse_info object.
605
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
606
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extern const cson_parse_info cson_parse_info_empty;
607
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
608
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
609
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_parse_opt object.
610
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
611
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extern const cson_parse_opt cson_parse_opt_empty;
612
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
613
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
614
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Client-configurable options for the cson_output() family of
615
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
functions.
616
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
617
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
struct cson_output_opt
618
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
619
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
620
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Specifies how to indent (or not) output. The values
621
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are:
622
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
623
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(0) == no extra indentation.
624
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
625
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(1) == 1 TAB character for each level.
626
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
627
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(>1) == that number of SPACES for each level.
628
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
629
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned char indentation;
630
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
631
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
632
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Maximum object/array depth to traverse. Traversing deeply can
633
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
be indicative of cycles in the object/array tree, and this
634
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value is used to figure out when to abort the traversal.
635
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
636
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned short maxDepth;
637
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
638
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
639
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If true, a newline will be added to generated output,
640
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else not.
641
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
642
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char addNewline;
643
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
644
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
645
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If true, a space will be added after the colon operator
646
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in objects' key/value pairs.
647
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
648
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char addSpaceAfterColon;
649
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
650
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
651
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If set to 1 then objects/arrays containing only a single value
652
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
will not indent an extra level for that value (but will indent
653
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on subsequent levels if that value contains multiple values).
654
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
655
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char indentSingleMemberValues;
656
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
657
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
658
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The JSON format allows, but does not require, JSON generators
659
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to backslash-escape forward slashes. This option enables/disables
660
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
that feature. According to JSON's inventor, Douglas Crockford:
661
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
662
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
<quote>
663
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It is allowed, not required. It is allowed so that JSON can be
664
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
safely embedded in HTML, which can freak out when seeing
665
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
strings containing "</". JSON tolerates "<\/" for this reason.
666
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
</quote>
667
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
668
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(from an email on 2011-04-08)
669
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
670
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The default value is 0 (because it's just damned ugly).
671
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
672
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char escapeForwardSlashes;
673
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
674
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_output_opt cson_output_opt;
675
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
676
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
677
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_output_opt object.
678
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
679
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define cson_output_opt_empty_m { 0/*indentation*/,\
680
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
25/*maxDepth*/, \
681
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*addNewline*/, \
682
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*addSpaceAfterColon*/, \
683
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*indentSingleMemberValues*/, \
684
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0/*escapeForwardSlashes*/ \
685
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
686
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
687
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
688
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_output_opt object.
689
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
690
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extern const cson_output_opt cson_output_opt_empty;
691
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
692
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
693
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Typedef for functions which act as an input source for
694
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the cson JSON parser.
695
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
696
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The arguments are:
697
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
698
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- state: implementation-specific state needed by the function.
699
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
700
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- n: when called, *n will be the number of bytes the function
701
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
should read and copy to dest. The function MUST NOT copy more than
702
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*n bytes to dest. Before returning, *n must be set to the number of
703
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bytes actually copied to dest. If that number is smaller than the
704
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
original *n value, the input is assumed to be completed (thus this
705
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is not useful with non-blocking readers).
706
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
707
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- dest: the destination memory to copy the data do.
708
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
709
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Must return 0 on success, non-0 on error (preferably a value from
710
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_rc).
711
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
712
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The parser allows this routine to return a partial character from a
713
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
UTF multi-byte character. The input routine does not need to
714
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
concern itself with character boundaries.
715
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
716
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef int (*cson_data_source_f)( void * state, void * dest, unsigned int * n );
717
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
718
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
719
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Typedef for functions which act as an output destination for
720
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generated JSON.
721
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
722
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The arguments are:
723
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
724
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- state: implementation-specific state needed by the function.
725
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
726
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- n: the length, in bytes, of src.
727
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
728
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- src: the source bytes which the output function should consume.
729
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The src pointer will be invalidated shortly after this function
730
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returns, so the implementation must copy or ignore the data, but not
731
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
hold a copy of the src pointer.
732
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
733
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Must return 0 on success, non-0 on error (preferably a value from
734
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_rc).
735
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
736
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
These functions are called relatively often during the JSON-output
737
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
process, and should try to be fast.
738
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
739
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef int (*cson_data_dest_f)( void * state, void const * src, unsigned int n );
740
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
741
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
742
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Reads JSON-formatted string data (in ASCII, UTF8, or UTF16), using the
743
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src function to fetch all input. This function fetches each input character
744
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from the source function, which is calls like src(srcState, buffer, bufferSize),
745
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and processes them. If anything is not JSON-kosher then this function
746
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fails and returns one of the non-0 cson_rc codes.
747
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
748
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function is only intended to read root nodes of a JSON tree, either
749
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a single object or a single array, containing any number of child elements.
750
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
751
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success, *tgt is assigned the value of the root node of the
752
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
JSON input, and the caller takes over ownership of that memory.
753
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error, *tgt is not modified and the caller need not do any
754
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
special cleanup, except possibly for the input source.
755
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
756
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
757
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The opt argument may point to an initialized cson_parse_opt object
758
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
which contains any settings the caller wants. If it is NULL then
759
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
default settings (the values defined in cson_parse_opt_empty) are
760
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
used.
761
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
762
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The info argument may be NULL. If it is not NULL then the parser
763
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
populates it with information which is useful in error
764
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
reporting. Namely, it contains the line/column of parse errors.
765
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
766
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The srcState argument is ignored by this function but is passed on to src,
767
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
so any output-destination-specific state can be stored there and accessed
768
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
via the src callback.
769
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
770
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Non-parse error conditions include:
771
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
772
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- (!tgt) or !src: CSON_RC_ArgError
773
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_RC_AllocError can happen at any time during the input phase
774
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
775
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Here's a complete example of using a custom input source:
776
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
777
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
778
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// Internal type to hold state for a JSON input string.
779
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct
780
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
781
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char const * str; // start of input string
782
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char const * pos; // current internal cursor position
783
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char const * end; // logical EOF (one-past-the-end)
784
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} StringSource;
785
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
786
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// cson_data_source_f() impl which uses StringSource.
787
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
static int cson_data_source_StringSource( void * state, void * dest,
788
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int * n )
789
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
790
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
StringSource * ss = (StringSource*) state;
791
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int i;
792
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned char * tgt = (unsigned char *)dest;
793
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( ! ss || ! n || !dest ) return CSON_RC_ArgError;
794
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if( !*n ) return CSON_RC_RangeError;
795
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for( i = 0;
796
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(i < *n) && (ss->pos < ss->end);
797
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++i, ++ss->pos, ++tgt )
798
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
799
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*tgt = *ss->pos;
800
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
801
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*n = i;
802
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return 0;
803
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
804
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
805
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
806
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// Now use StringSource together with cson_parse()
807
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
StringSource ss;
808
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * root = NULL;
809
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char const * json = "{\"k1\":123}";
810
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ss.str = ss.pos = json;
811
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ss.end = json + strlen(json);
812
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_parse( &root, cson_data_source_StringSource, &ss, NULL, NULL );
813
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
814
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
815
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It is recommended that clients wrap such utility code into
816
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
type-safe wrapper functions which also initialize the internal
817
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
state object and check the user-provided parameters for legality
818
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
before passing them on to cson_parse(). For examples of this, see
819
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_parse_FILE() or cson_parse_string().
820
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
821
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
TODOs:
822
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
823
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Buffer the input in larger chunks. We currently read
824
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
byte-by-byte, but i'm too tired to write/test the looping code for
825
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the buffering.
826
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
827
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_parse_FILE()
828
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_parse_string()
829
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
830
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_parse( cson_value ** tgt, cson_data_source_f src, void * srcState,
831
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_parse_opt const * opt, cson_parse_info * info );
832
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
833
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A cson_data_source_f() implementation which requires the state argument
834
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to be a readable (FILE*) handle.
835
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
836
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_data_source_FILE( void * state, void * dest, unsigned int * n );
837
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
838
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
839
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_parse( tgt, cson_data_source_FILE, src, opt ).
840
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
841
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_parse_filename()
842
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
843
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_parse_FILE( cson_value ** tgt, FILE * src,
844
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_parse_opt const * opt, cson_parse_info * info );
845
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
846
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
847
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Convenience wrapper around cson_parse_FILE() which opens the given filename.
848
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
849
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns CSON_RC_IOError if the file cannot be opened.
850
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
851
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_parse_FILE()
852
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
853
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_parse_filename( cson_value ** tgt, char const * src,
854
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_parse_opt const * opt, cson_parse_info * info );
855
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
856
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
857
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Uses an internal helper class to pass src through cson_parse().
858
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See that function for the return value and argument semantics.
859
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
860
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src must be a string containing JSON code, at least len bytes long,
861
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and the parser will attempt to parse exactly len bytes from src.
862
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
863
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If len is less than 2 (the minimum length of a legal top-node JSON
864
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object) then CSON_RC_RangeError is returned.
865
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
866
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_parse_string( cson_value ** tgt, char const * src, unsigned int len,
867
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_parse_opt const * opt, cson_parse_info * info );
868
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
869
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
870
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
871
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
872
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Outputs the given value as a JSON-formatted string, sending all
873
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
output to the given callback function. It is intended for top-level
874
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
objects or arrays, but can be used with any cson_value.
875
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
876
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If opt is NULL then default options (the values defined in
877
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_output_opt_empty) are used.
878
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
879
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If opt->maxDepth is exceeded while traversing the value tree,
880
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_RangeError is returned.
881
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
882
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The destState parameter is ignored by this function and is passed
883
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on to the dest function.
884
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
885
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success. On error, any amount of output might have been
886
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generated before the error was triggered.
887
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
888
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example:
889
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
890
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
891
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_output( myValue, cson_data_dest_FILE, stdout, NULL );
892
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// basically equivalent to: cson_output_FILE( myValue, stdout, NULL );
893
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// but note that cson_output_FILE() actually uses different defaults
894
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// for the output options.
895
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
896
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
897
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_output( cson_value const * src, cson_data_dest_f dest, void * destState, cson_output_opt const * opt );
898
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
899
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
900
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
901
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A cson_data_dest_f() implementation which requires the state argument
902
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to be a writable (FILE*) handle.
903
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
904
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_data_dest_FILE( void * state, void const * src, unsigned int n );
905
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
906
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
907
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Almost equivalent to cson_output( src, cson_data_dest_FILE, dest, opt ),
908
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
with one minor difference: if opt is NULL then the default options
909
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
always include the addNewline option, since that is normally desired
910
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for FILE output.
911
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
912
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_output_filename()
913
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
914
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_output_FILE( cson_value const * src, FILE * dest, cson_output_opt const * opt );
915
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
916
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Convenience wrapper around cson_output_FILE() which writes to the given filename, destroying
917
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
any existing contents. Returns CSON_RC_IOError if the file cannot be opened.
918
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
919
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_output_FILE()
920
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
921
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_output_filename( cson_value const * src, char const * dest, cson_output_opt const * fmt );
922
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
923
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
924
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the virtual type of v, or CSON_TYPE_UNDEF if !v.
925
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
926
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_type_id cson_value_type_id( cson_value const * v );
927
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
928
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
929
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v is null, v->api is NULL, or v holds the special undefined value. */
930
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_undef( cson_value const * v );
931
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains a null value. */
932
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_null( cson_value const * v );
933
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains a bool value. */
934
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_bool( cson_value const * v );
935
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains an integer value. */
936
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_integer( cson_value const * v );
937
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains a double value. */
938
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_double( cson_value const * v );
939
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains a number (double, integer) value. */
940
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_number( cson_value const * v );
941
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains a string value. */
942
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_string( cson_value const * v );
943
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains an array value. */
944
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_array( cson_value const * v );
945
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Returns true if v contains an object value. */
946
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_is_object( cson_value const * v );
947
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
948
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @struct cson_object
949
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
950
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object is an opaque handle to an Object value.
951
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
952
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
They are used like:
953
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
954
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
955
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object * obj = cson_value_get_object(myValue);
956
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
957
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
958
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
959
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
They can be created like:
960
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
961
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
962
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * objV = cson_value_new_object();
963
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object * obj = cson_value_get_object(objV);
964
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// obj is owned by objV and objV must eventually be freed
965
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// using cson_value_free() or added to a container
966
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// object/array (which transfers ownership to that container).
967
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
968
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
969
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_object()
970
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_get_object()
971
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_free()
972
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
973
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
974
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_object cson_object;
975
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
976
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @struct cson_array
977
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
978
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array is an opaque handle to an Array value.
979
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
980
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
They are used like:
981
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
982
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
983
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array * obj = cson_value_get_array(myValue);
984
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
985
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
986
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
987
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
They can be created like:
988
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
989
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
990
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * arV = cson_value_new_array();
991
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array * ar = cson_value_get_array(arV);
992
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// ar is owned by arV and arV must eventually be freed
993
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// using cson_value_free() or added to a container
994
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// object/array (which transfers ownership to that container).
995
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
996
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
997
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_array()
998
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_get_array()
999
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_free()
1000
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1001
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1002
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_array cson_array;
1003
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1004
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @struct cson_string
1005
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1006
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson-internal string type, opaque to client code. Strings in cson
1007
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are immutable and allocated only by library internals, never
1008
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
directly by client code.
1009
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1010
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The actual string bytes are to be allocated together in the same
1011
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
memory chunk as the cson_string object, which saves us 1 malloc()
1012
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and 1 pointer member in this type (because we no longer have a
1013
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
direct pointer to the memory).
1014
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1015
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Potential TODOs:
1016
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1017
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_string_cstr()
1018
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1019
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_string cson_string;
1020
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1021
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1022
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Converts the given value to a boolean, using JavaScript semantics depending
1023
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on the concrete type of val:
1024
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1025
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
undef or null: false
1026
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1027
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
boolean: same
1028
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1029
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
integer, double: 0 or 0.0 == false, else true
1030
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1031
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object, array: true
1032
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1033
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
string: length-0 string is false, else true.
1034
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1035
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success and assigns *v (if v is not NULL) to either 0 or 1.
1036
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error (val is NULL) then v is not modified.
1037
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1038
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_fetch_bool( cson_value const * val, char * v );
1039
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1040
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1041
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Similar to cson_value_fetch_bool(), but fetches an integer value.
1042
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1043
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The conversion, if any, depends on the concrete type of val:
1044
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1045
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NULL, null, undefined: *v is set to 0 and 0 is returned.
1046
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1047
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
string, object, array: *v is set to 0 and
1048
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_TypeError is returned. The error may normally be safely
1049
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ignored, but it is provided for those wanted to know whether a direct
1050
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
conversion was possible.
1051
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1052
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
integer: *v is set to the int value and 0 is returned.
1053
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1054
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
double: *v is set to the value truncated to int and 0 is returned.
1055
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1056
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_fetch_integer( cson_value const * val, cson_int_t * v );
1057
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1058
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1059
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The same conversions and return values as
1060
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_fetch_integer(), except that the roles of int/double are
1061
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
swapped.
1062
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1063
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_fetch_double( cson_value const * val, cson_double_t * v );
1064
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1065
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1066
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If cson_value_is_string(val) then this function assigns *str to the
1067
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contents of the string. str may be NULL, in which case this function
1068
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
functions like cson_value_is_string() but returns 0 on success.
1069
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1070
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 if val is-a string, else non-0, in which case *str is not
1071
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
modified.
1072
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1073
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The bytes are owned by the given value and may be invalidated in any of
1074
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the following ways:
1075
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1076
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- The value is cleaned up or freed.
1077
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1078
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- An array or object containing the value peforms a re-allocation
1079
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(it shrinks or grows).
1080
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1081
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
And thus the bytes should be consumed before any further operations
1082
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on val or any container which holds it.
1083
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1084
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that this routine does not convert non-String values to their
1085
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
string representations. (Adding that ability would add more
1086
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
overhead to every cson_value instance.)
1087
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1088
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_fetch_string( cson_value const * val, cson_string ** str );
1089
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1090
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1091
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If cson_value_is_object(val) then this function assigns *obj to the underlying
1092
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object value and returns 0, otherwise non-0 is returned and *obj is not modified.
1093
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1094
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
obj may be NULL, in which case this function works like cson_value_is_object()
1095
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
but with inverse return value semantics (0==success) (and it's a few
1096
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CPU cycles slower).
1097
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1098
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The *obj pointer is owned by val, and will be invalidated when val
1099
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is cleaned up.
1100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Achtung: for best results, ALWAYS pass a pointer to NULL as the
1102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
second argument, e.g.:
1103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object * obj = NULL;
1106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_value_fetch_object( val, &obj );
1107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// Or, more simply:
1109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
obj = cson_value_get_object( val );
1110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_get_object()
1113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_fetch_object( cson_value const * val, cson_object ** obj );
1115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Identical to cson_value_fetch_object(), but works on array values.
1118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_get_array()
1120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_fetch_array( cson_value const * val, cson_array ** tgt );
1122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_value_fetch_bool(). Returns 0 if val
1125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is NULL.
1126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char cson_value_get_bool( cson_value const * val );
1128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_value_fetch_integer(). Returns 0 if val
1131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is NULL.
1132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_int_t cson_value_get_integer( cson_value const * val );
1134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_value_fetch_double(). Returns 0.0 if val
1137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is NULL.
1138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_double_t cson_value_get_double( cson_value const * val );
1140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_value_fetch_string(). Returns NULL if val
1143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is-not-a string value.
1144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_string * cson_value_get_string( cson_value const * val );
1146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns a pointer to the NULL-terminated string bytes of str.
1149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The bytes are owned by string and will be invalided when it
1150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is cleaned up.
1151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If str is NULL then NULL is returned. If the string has a length
1153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of 0 then "" is returned.
1154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_string_length_bytes()
1156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_get_string()
1157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char const * cson_string_cstr( cson_string const * str );
1159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Convenience function which returns the string bytes of
1162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the given value if it is-a string, otherwise it returns
1163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NULL. Note that this does no conversion of non-string types
1164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to strings.
1165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_string_cstr(cson_value_get_string(val)).
1167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char const * cson_value_get_cstr( cson_value const * val );
1169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_string_cmp_cstr_n(lhs, cson_string_cstr(rhs), cson_string_length_bytes(rhs)).
1172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_string_cmp( cson_string const * lhs, cson_string const * rhs );
1174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Compares lhs to rhs using memcmp()/strcmp() semantics. Generically
1177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
speaking it returns a negative number if lhs is less-than rhs, 0 if
1178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
they are equivalent, or a positive number if lhs is greater-than
1179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
rhs. It has the following rules for equivalence:
1180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- The maximum number of bytes compared is the lesser of rhsLen and
1182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the length of lhs. If the strings do not match, but compare equal
1183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
up to the just-described comparison length, the shorter string is
1184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
considered to be less-than the longer one.
1185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If lhs and rhs are both NULL, or both have a length of 0 then they will
1187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
compare equal.
1188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If lhs is null/length-0 but rhs is not then lhs is considered to be less-than
1190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
rhs.
1191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If rhs is null/length-0 but lhs is not then rhs is considered to be less-than
1193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
rhs.
1194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- i have no clue if the results are exactly correct for UTF strings.
1196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_string_cmp_cstr_n( cson_string const * lhs, char const * rhs, unsigned int rhsLen );
1199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_string_cmp_cstr_n( lhs, rhs, (rhs&&*rhs)?strlen(rhs):0 ).
1202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_string_cmp_cstr( cson_string const * lhs, char const * rhs );
1204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the length, in bytes, of str, or 0 if str is NULL. This is
1207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
an O(1) operation.
1208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
TODO: add cson_string_length_chars() (is O(N) unless we add another
1210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
member to store the char length).
1211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_string_cstr()
1213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int cson_string_length_bytes( cson_string const * str );
1215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the number of UTF8 characters in str. This value will
1218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
be at most as long as cson_string_length_bytes() for the
1219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
same string, and less if it has multi-byte characters.
1220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 if str is NULL.
1222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int cson_string_length_utf8( cson_string const * str );
1224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Like cson_value_get_string(), but returns a copy of the underying
1227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
string bytes, which the caller owns and must eventually free
1228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
using free().
1229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char * cson_value_get_string_copy( cson_value const * val );
1231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_value_fetch_object(). Returns NULL if val
1234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is-not-a object value.
1235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object * cson_value_get_object( cson_value const * val );
1237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_value_fetch_array(). Returns NULL if val
1240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is-not-a array value.
1241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array * cson_value_get_array( cson_value const * val );
1243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Const-correct form of cson_value_get_array().
1246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array const * cson_value_get_array_c( cson_value const * val );
1248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If ar is-a array and is at least (pos+1) entries long then *v (if v is not NULL)
1251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is assigned to the value at that position (which may be NULL).
1252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Ownership of the *v return value is unchanged by this call. (The
1254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
containing array may share ownership of the value with other
1255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
containers.)
1256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If pos is out of range, non-0 is returned and *v is not modified.
1258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If v is NULL then this function returns 0 if pos is in bounds, but does not
1260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
otherwise return a value to the caller.
1261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_array_value_fetch( cson_array const * ar, unsigned int pos, cson_value ** v );
1263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_array_value_fetch() which returns NULL if
1266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ar is NULL, pos is out of bounds or if ar has no element at that
1267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
position.
1268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_array_get( cson_array const * ar, unsigned int pos );
1270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Ensures that ar has allocated space for at least the given
1273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
number of entries. This never shrinks the array and never
1274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
changes its logical size, but may pre-allocate space in the
1275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
array for storing new (as-yet-unassigned) values.
1276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success, or non-zero on error:
1278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If ar is NULL: CSON_RC_ArgError
1280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If allocation fails: CSON_RC_AllocError
1282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_array_reserve( cson_array * ar, unsigned int size );
1284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If ar is not NULL, sets *v (if v is not NULL) to the length of the array
1287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and returns 0. Returns CSON_RC_ArgError if ar is NULL.
1288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_array_length_fetch( cson_array const * ar, unsigned int * v );
1290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Simplified form of cson_array_length_fetch() which returns 0 if ar
1293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is NULL.
1294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int cson_array_length_get( cson_array const * ar );
1296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sets the given index of the given array to the given value.
1299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If ar already has an item at that index then it is cleaned up and
1301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
freed before inserting the new item.
1302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ar is expanded, if needed, to be able to hold at least (ndx+1)
1304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
items, and any new entries created by that expansion are empty
1305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(NULL values).
1306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success, 0 is returned and ownership of v is transfered to ar.
1308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error ownership of v is NOT modified, and the caller may still
1310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
need to clean it up. For example, the following code will introduce
1311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a leak if this function fails:
1312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array_append( myArray, cson_value_new_integer(42) );
1315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Because the value created by cson_value_new_integer() has no owner
1318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and is not cleaned up. The "more correct" way to do this is:
1319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * v = cson_value_new_integer(42);
1322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_array_append( myArray, v );
1323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( 0 != rc ) {
1324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free( v );
1325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... handle error ...
1326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
1327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_array_set( cson_array * ar, unsigned int ndx, cson_value * v );
1331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Appends the given value to the given array, transfering ownership of
1334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
v to ar. On error, ownership of v is not modified. Ownership of ar
1335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is never changed by this function.
1336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This is functionally equivalent to
1338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array_set(ar,cson_array_length_get(ar),v), but this
1339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
implementation has slightly different array-preallocation policy
1340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(it grows more eagerly).
1341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success, non-zero on error. Error cases include:
1343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- ar or v are NULL: CSON_RC_ArgError
1345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Array cannot be expanded to hold enough elements: CSON_RC_AllocError.
1347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Appending would cause a numeric overlow in the array's size:
1349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_RangeError. (However, you'll get an AllocError long before
1350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
that happens!)
1351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error ownership of v is NOT modified, and the caller may still
1353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
need to clean it up. See cson_array_set() for the details.
1354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_array_append( cson_array * ar, cson_value * v );
1357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Creates a new cson_value from the given boolean value.
1361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Ownership of the new value is passed to the caller, who must
1363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
eventually either free the value using cson_value_free() or
1364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
inserting it into a container (array or object), which transfers
1365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ownership to the container. See the cson_value class documentation
1366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for more details.
1367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Semantically speaking this function Returns NULL on allocation
1369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
error, but the implementation never actually allocates for this
1370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case. Nonetheless, it must be treated as if it were an allocated
1371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value.
1372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_new_bool( char v );
1374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Alias for cson_value_new_bool(v).
1378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_new_bool(char v);
1380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the special JSON "null" value. When outputing JSON,
1383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
its string representation is "null" (without the quotes).
1384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See cson_value_new_bool() for notes regarding the returned
1386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value's memory.
1387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_null( void );
1389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1391
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_value_new_bool(1).
1392
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1393
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_true( void );
1394
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1395
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1396
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_value_new_bool(0).
1397
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1398
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_false( void );
1399
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1400
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1401
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Semantically the same as cson_value_new_bool(), but for integers.
1402
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1403
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_new_integer( cson_int_t v );
1404
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1405
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1406
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Alias for cson_value_new_integer(v).
1407
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1408
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_new_int(cson_int_t v);
1409
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1410
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1411
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Semantically the same as cson_value_new_bool(), but for doubles.
1412
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1413
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_new_double( cson_double_t v );
1414
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1415
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1416
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Alias for cson_value_new_double(v).
1417
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1418
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_new_double(cson_double_t v);
1419
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1420
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1421
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Semantically the same as cson_value_new_bool(), but for strings.
1422
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This creates a JSON value which copies the first n bytes of str.
1423
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The string will automatically be NUL-terminated.
1424
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1425
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that if str is NULL or n is 0, this function still
1426
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returns non-NULL value representing that empty string.
1427
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1428
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns NULL on allocation error.
1429
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1430
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See cson_value_new_bool() for important information about the
1431
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returned memory.
1432
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1433
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_new_string( char const * str, unsigned int n );
1434
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1435
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1436
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Allocates a new "object" value and transfers ownership of it to the
1437
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
caller. It must eventually be destroyed, by the caller or its
1438
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
owning container, by passing it to cson_value_free().
1439
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1440
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns NULL on allocation error.
1441
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1442
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Post-conditions: cson_value_is_object(value) will return true.
1443
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1444
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_array()
1445
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_free()
1446
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1447
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_new_object( void );
1448
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1449
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1450
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This works like cson_value_new_object() but returns an Object
1451
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
handle directly.
1452
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1453
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The value handle for the returned object can be fetched with
1454
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_value(theObject).
1455
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1456
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Ownership is transfered to the caller, who must eventually free it
1457
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by passing the Value handle (NOT the Object handle) to
1458
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free() or passing ownership to a parent container.
1459
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1460
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns NULL on error (out of memory).
1461
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1462
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object * cson_new_object( void );
1463
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1464
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1465
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Identical to cson_new_object() except that it creates
1466
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
an Array.
1467
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1468
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array * cson_new_array( void );
1469
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1470
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1471
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Identical to cson_new_object() except that it creates
1472
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a String.
1473
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1474
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_string * cson_new_string(char const * val, unsigned int len);
1475
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1476
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1477
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_value_free(cson_object_value(x)).
1478
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1479
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void cson_free_object(cson_object *x);
1480
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1481
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1482
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_value_free(cson_array_value(x)).
1483
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1484
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void cson_free_array(cson_array *x);
1485
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1486
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1487
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_value_free(cson_string_value(x)).
1488
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1489
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void cson_free_string(cson_string *x);
1490
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1491
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1492
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1493
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Allocates a new "array" value and transfers ownership of it to the
1494
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
caller. It must eventually be destroyed, by the caller or its
1495
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
owning container, by passing it to cson_value_free().
1496
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1497
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns NULL on allocation error.
1498
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1499
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Post-conditions: cson_value_is_array(value) will return true.
1500
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1501
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_object()
1502
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_free()
1503
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1504
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_new_array( void );
1505
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1506
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1507
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Frees any resources owned by v, then frees v. If v is a container
1508
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
type (object or array) its children are also freed (recursively).
1509
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1510
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If v is NULL, this is a no-op.
1511
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1512
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function decrements a reference count and only destroys the
1513
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value if its reference count drops to 0. Reference counts are
1514
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
increased by either inserting the value into a container or via
1515
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_add_reference(). Even if this function does not
1516
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
immediately destroy the value, the value must be considered, from
1517
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the perspective of that client code, to have been
1518
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
destroyed/invalidated by this call.
1519
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1520
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1521
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_object()
1522
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_new_array()
1523
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_value_add_reference()
1524
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1525
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void cson_value_free(cson_value * v);
1526
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1527
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1528
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Alias for cson_value_free().
1529
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1530
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void cson_free_value(cson_value * v);
1531
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1532
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1533
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1534
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Functionally similar to cson_array_set(), but uses a string key
1535
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
as an index. Like arrays, if a value already exists for the given key,
1536
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
it is destroyed by this function before inserting the new value.
1537
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1538
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If v is NULL then this call is equivalent to
1539
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_unset(obj,key). Note that (v==NULL) is treated
1540
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
differently from v having the special null value. In the latter
1541
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case, the key is set to the special null value.
1542
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1543
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The key may be encoded as ASCII or UTF8. Results are undefined
1544
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
with other encodings, and the errors won't show up here, but may
1545
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
show up later, e.g. during output.
1546
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1547
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success, non-0 on error. It has the following error
1548
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cases:
1549
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1550
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_RC_ArgError: obj or key are NULL or strlen(key) is 0.
1551
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1552
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_RC_AllocError: an out-of-memory error
1553
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1554
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error ownership of v is NOT modified, and the caller may still
1555
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
need to clean it up. For example, the following code will introduce
1556
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a leak if this function fails:
1557
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1558
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1559
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_set( myObj, "foo", cson_value_new_integer(42) );
1560
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1561
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1562
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Because the value created by cson_value_new_integer() has no owner
1563
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and is not cleaned up. The "more correct" way to do this is:
1564
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1565
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1566
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * v = cson_value_new_integer(42);
1567
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_object_set( myObj, "foo", v );
1568
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( 0 != rc ) {
1569
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free( v );
1570
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... handle error ...
1571
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
1572
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1573
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1574
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Potential TODOs:
1575
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1576
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Add an overload which takes a cson_value key instead. To get
1577
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
any value out of that we first need to be able to convert arbitrary
1578
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value types to strings. We could simply to-JSON them and use those
1579
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
as keys.
1580
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1581
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_object_set( cson_object * obj, char const * key, cson_value * v );
1582
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1583
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1584
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Functionaly equivalent to cson_object_set(), but takes a
1585
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_string() as its KEY type. The string will be reference-counted
1586
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
like any other values, and the key may legally be used within this
1587
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
same container (as a value) or others (as a key or value) at the
1588
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
same time.
1589
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1590
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success. On error, ownership (i.e. refcounts) of key
1591
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and value are not modified. On success key and value will get
1592
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
increased refcounts unless they are replacing themselves (which is
1593
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a harmless no-op).
1594
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1595
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_object_set_s( cson_object * obj, cson_string * key, cson_value * v );
1596
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1597
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1598
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Removes a property from an object.
1599
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1600
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If obj contains the given key, it is removed and 0 is returned. If
1601
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
it is not found, CSON_RC_NotFoundError is returned (which can
1602
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
normally be ignored by client code).
1603
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1604
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_RC_ArgError is returned if obj or key are NULL or key has
1605
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a length of 0.
1606
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1607
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 if the given key is found and removed.
1608
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1609
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This is functionally equivalent calling
1610
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_set(obj,key,NULL).
1611
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1612
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_object_unset( cson_object * obj, char const * key );
1613
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1614
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1615
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Searches the given object for a property with the given key. If found,
1616
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
it is returned. If no match is found, or any arguments are NULL, NULL is
1617
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returned. The returned object is owned by obj, and may be invalidated
1618
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by ANY operations which change obj's property list (i.e. add or remove
1619
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties).
1620
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1621
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
FIXME: allocate the key/value pairs like we do for cson_array,
1622
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to get improve the lifetimes of fetched values.
1623
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1624
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_object_fetch_sub()
1625
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_object_get_sub()
1626
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1627
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_object_get( cson_object const * obj, char const * key );
1628
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1629
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1630
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Equivalent to cson_object_get() but takes a cson_string argument
1631
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
instead of a C-style string.
1632
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1633
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_object_get_s( cson_object const * obj, cson_string const *key );
1634
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1635
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1636
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Similar to cson_object_get(), but removes the value from the parent
1637
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object's ownership. If no item is found then NULL is returned, else
1638
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the object (now owned by the caller or possibly shared with other
1639
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
containers) is returned.
1640
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1641
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns NULL if either obj or key are NULL or key has a length
1642
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of 0.
1643
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1644
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function reduces the returned value's reference count but has
1645
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the specific property that it does not treat refcounts 0 and 1
1646
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
identically, meaning that the returned object may have a refcount
1647
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of 0. This behaviour works around a corner-case where we want to
1648
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extract a child element from its parent and then destroy the parent
1649
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(which leaves us in an undesireable (normally) reference count
1650
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
state).
1651
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1652
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_object_take( cson_object * obj, char const * key );
1653
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1654
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1655
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fetches a property from a child (or [great-]*grand-child) object.
1656
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1657
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
obj is the object to search.
1658
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1659
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path is a delimited string, where the delimiter is the given
1660
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
separator character.
1661
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1662
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function searches for the given path, starting at the given object
1663
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and traversing its properties as the path specifies. If a given part of the
1664
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path is not found, then this function fails with CSON_RC_NotFoundError.
1665
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1666
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If it finds the given path, it returns the value by assiging *tgt
1667
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to it. If tgt is NULL then this function has no side-effects but
1668
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
will return 0 if the given path is found within the object, so it can be used
1669
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to test for existence without fetching it.
1670
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1671
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 if it finds an entry, CSON_RC_NotFoundError if it finds
1672
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
no item, and any other non-zero error code on a "real" error. Errors include:
1673
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1674
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- obj or path are NULL: CSON_RC_ArgError
1675
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1676
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- separator is 0, or path is an empty string or contains only
1677
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
separator characters: CSON_RC_RangeError
1678
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1679
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- There is an upper limit on how long a single path component may
1680
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
be (some "reasonable" internal size), and CSON_RC_RangeError is
1681
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returned if that length is violated.
1682
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1683
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1684
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Limitations:
1685
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1686
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- It has no way to fetch data from arrays this way. i could
1687
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
imagine, e.g., a path of "subobj.subArray.0" for
1688
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
subobj.subArray[0], or "0.3.1" for [0][3][1]. But i'm too
1689
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lazy/tired to add this.
1690
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1691
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example usage:
1692
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1693
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1694
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Assume we have a JSON structure which abstractly looks like:
1695
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1696
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1697
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{"subobj":{"subsubobj":{"myValue":[1,2,3]}}}
1698
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1699
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1700
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Out goal is to get the value of myValue. We can do that with:
1701
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1702
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1703
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * v = NULL;
1704
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_object_fetch_sub( object, &v, "subobj.subsubobj.myValue", '.' );
1705
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1706
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1707
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that because keys in JSON may legally contain a '.', the
1708
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
separator must be specified by the caller. e.g. the path
1709
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"subobj/subsubobj/myValue" with separator='/' is equivalent the
1710
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path "subobj.subsubobj.myValue" with separator='.'. The value of 0
1711
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is not legal as a separator character because we cannot
1712
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
distinguish that use from the real end-of-string without requiring
1713
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the caller to also pass in the length of the string.
1714
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1715
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Multiple successive separators in the list are collapsed into a
1716
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
single separator for parsing purposes. e.g. the path "a...b...c"
1717
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(separator='.') is equivalent to "a.b.c".
1718
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1719
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_object_get_sub()
1720
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_object_get_sub2()
1721
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1722
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_object_fetch_sub( cson_object const * obj, cson_value ** tgt, char const * path, char separator );
1723
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1724
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1725
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Similar to cson_object_fetch_sub(), but derives the path separator
1726
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
character from the first byte of the path argument. e.g. the
1727
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
following arg equivalent:
1728
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1729
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1730
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_fetch_sub( obj, &tgt, "foo.bar.baz", '.' );
1731
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_fetch_sub2( obj, &tgt, ".foo.bar.baz" );
1732
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1733
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1734
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_object_fetch_sub2( cson_object const * obj, cson_value ** tgt, char const * path );
1735
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1736
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1737
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Convenience form of cson_object_fetch_sub() which returns NULL if the given
1738
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
item is not found.
1739
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1740
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_object_get_sub( cson_object const * obj, char const * path, char sep );
1741
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1742
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1743
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Convenience form of cson_object_fetch_sub2() which returns NULL if the given
1744
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
item is not found.
1745
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1746
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_object_get_sub2( cson_object const * obj, char const * path );
1747
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1748
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @enum CSON_MERGE_FLAGS
1749
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1750
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Flags for cson_object_merge().
1751
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1752
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
enum CSON_MERGE_FLAGS {
1753
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_MERGE_DEFAULT = 0,
1754
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_MERGE_REPLACE = 0x01,
1755
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_MERGE_NO_RECURSE = 0x02
1756
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
1757
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1758
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1759
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"Merges" the src object's properties into dest. Each property in
1760
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src is copied (using reference counting, not cloning) into dest. If
1761
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
dest already has the given property then behaviour depends on the
1762
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
flags argument:
1763
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1764
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If flag has the CSON_MERGE_REPLACE bit set then this function will
1765
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by default replace non-object properties with the src property. If
1766
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
src and dest both have the property AND it is an Object then this
1767
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function operates recursively on those objects. If
1768
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_MERGE_NO_RECURSE is set then objects are not recursed in this
1769
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
manner, and will be completely replaced if CSON_MERGE_REPLACE is
1770
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
set.
1771
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1772
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Array properties in dest are NOT recursed for merging - they are
1773
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
either replaced or left as-is, depending on whether flags contains
1774
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
he CSON_MERGE_REPLACE bit.
1775
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1776
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success. The error conditions are:
1777
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1778
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- dest or src are NULL or (dest==src) returns CSON_RC_ArgError.
1779
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1780
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- dest or src contain cyclic references - this will likely cause a
1781
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
crash due to endless recursion.
1782
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1783
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Potential TODOs:
1784
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1785
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Add a flag to copy clones, not the original values.
1786
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1787
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_object_merge( cson_object * dest, cson_object const * src, int flags );
1788
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1789
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1790
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1791
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
An iterator type for traversing object properties.
1792
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1793
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Its values must be considered private, not to be touched by client
1794
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
code.
1795
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1796
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_object_iter_init()
1797
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_object_iter_next()
1798
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1799
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
struct cson_object_iterator
1800
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
1801
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1802
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @internal
1803
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The underlying object.
1804
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1805
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object const * obj;
1806
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @internal
1807
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Current position in the property list.
1808
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1809
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int pos;
1810
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
1811
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_object_iterator cson_object_iterator;
1812
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1813
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1814
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_object_iterator object.
1815
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1816
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define cson_object_iterator_empty_m {NULL/*obj*/,0/*pos*/}
1817
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1818
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1819
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Empty-initialized cson_object_iterator object.
1820
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1821
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extern const cson_object_iterator cson_object_iterator_empty;
1822
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1823
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1824
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Initializes the given iterator to point at the start of obj's
1825
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties. Returns 0 on success or CSON_RC_ArgError if !obj
1826
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
or !iter.
1827
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1828
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
obj must outlive iter, or results are undefined. Results are also
1829
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
undefined if obj is modified while the iterator is active.
1830
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1831
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_object_iter_next()
1832
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1833
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_object_iter_init( cson_object const * obj, cson_object_iterator * iter );
1834
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1835
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @struct cson_kvp
1836
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1837
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This class represents a key/value pair and is used for storing
1838
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object properties. It is opaque to client code, and the public
1839
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
API only uses this type for purposes of iterating over cson_object
1840
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties using the cson_object_iterator interfaces.
1841
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1842
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1843
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_kvp cson_kvp;
1844
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1845
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1846
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the next property from the given iterator's object, or NULL
1847
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if the end of the property list as been reached.
1848
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1849
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that the order of object properties is undefined by the API,
1850
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and may change from version to version.
1851
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1852
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The returned memory belongs to the underlying object and may be
1853
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
invalidated by any changes to that object.
1854
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1855
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example usage:
1856
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1857
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1858
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_iterator it;
1859
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object_iter_init( myObject, &it ); // only fails if either arg is 0
1860
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_kvp * kvp;
1861
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_string const * key;
1862
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value const * val;
1863
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
while( (kvp = cson_object_iter_next(&it) ) )
1864
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
1865
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
key = cson_kvp_key(kvp);
1866
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
val = cson_kvp_value(kvp);
1867
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
1868
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
1869
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1870
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1871
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
There is no need to clean up an iterator, as it holds no dynamic resources.
1872
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1873
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_kvp_key()
1874
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_kvp_value()
1875
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1876
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_kvp * cson_object_iter_next( cson_object_iterator * iter );
1877
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1878
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1879
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1880
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the key associated with the given key/value pair,
1881
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
or NULL if !kvp. The memory is owned by the object which contains
1882
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the key/value pair, and may be invalidated by any modifications
1883
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to that object.
1884
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1885
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_string * cson_kvp_key( cson_kvp const * kvp );
1886
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1887
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1888
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the value associated with the given key/value pair,
1889
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
or NULL if !kvp. The memory is owned by the object which contains
1890
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the key/value pair, and may be invalidated by any modifications
1891
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to that object.
1892
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1893
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_kvp_value( cson_kvp const * kvp );
1894
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1895
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @typedef some unsigned int type cson_size_t
1896
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1897
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1898
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef unsigned int cson_size_t;
1899
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1900
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1901
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A generic buffer class.
1902
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1903
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
They can be used like this:
1904
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1905
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1906
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer b = cson_buffer_empty;
1907
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_buffer_reserve( &buf, 100 );
1908
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( 0 != rc ) { ... allocation error ... }
1909
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... use buf.mem ...
1910
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... then free it up ...
1911
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer_reserve( &buf, 0 );
1912
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1913
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1914
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
To take over ownership of a buffer's memory:
1915
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1916
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1917
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void * mem = b.mem;
1918
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// mem is b.capacity bytes long, but only b.used
1919
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// bytes of it has been "used" by the API.
1920
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
b = cson_buffer_empty;
1921
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1922
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1923
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The memory now belongs to the caller and must eventually be
1924
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
free()d.
1925
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1926
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
struct cson_buffer
1927
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
1928
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1929
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The number of bytes allocated for this object.
1930
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Use cson_buffer_reserve() to change its value.
1931
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1932
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_size_t capacity;
1933
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1934
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The number of bytes "used" by this object. It is not needed for
1935
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
all use cases, and management of this value (if needed) is up
1936
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to the client. The cson_buffer public API does not use this
1937
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
member. The intention is that this can be used to track the
1938
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
length of strings which are allocated via cson_buffer, since
1939
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
they need an explicit length and/or null terminator.
1940
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1941
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_size_t used;
1942
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1943
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1944
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This is a debugging/metric-counting value
1945
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
intended to help certain malloc()-conscious
1946
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
clients tweak their memory reservation sizes.
1947
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Each time cson_buffer_reserve() expands the
1948
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
buffer, it increments this value by 1.
1949
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1950
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_size_t timesExpanded;
1951
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1952
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1953
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The memory allocated for and owned by this buffer.
1954
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Use cson_buffer_reserve() to change its size or
1955
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
free it. To take over ownership, do:
1956
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1957
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1958
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void * myptr = buf.mem;
1959
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
buf = cson_buffer_empty;
1960
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
1961
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1962
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(You might also need to store buf.used and buf.capacity,
1963
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
depending on what you want to do with the memory.)
1964
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1965
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
When doing so, the memory must eventually be passed to free()
1966
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to deallocate it.
1967
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
1968
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned char * mem;
1969
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
1970
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Convenience typedef. */
1971
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typedef struct cson_buffer cson_buffer;
1972
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1973
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** An empty-initialized cson_buffer object. */
1974
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define cson_buffer_empty_m {0/*capacity*/,0/*used*/,0/*timesExpanded*/,NULL/*mem*/}
1975
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** An empty-initialized cson_buffer object. */
1976
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extern const cson_buffer cson_buffer_empty;
1977
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1978
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
1979
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Uses cson_output() to append all JSON output to the given buffer
1980
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object. The semantics for the (v, opt) parameters, and the return
1981
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value, are as documented for cson_output(). buf must be a non-NULL
1982
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pointer to a properly initialized buffer (see example below).
1983
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1984
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Ownership of buf is not changed by calling this.
1985
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1986
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success 0 is returned and the contents of buf.mem are guaranteed
1987
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to be NULL-terminated. On error the buffer might contain partial
1988
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contents, and it should not be used except to free its contents.
1989
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1990
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error non-zero is returned. Errors include:
1991
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1992
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Invalid arguments: CSON_RC_ArgError
1993
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1994
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Buffer cannot be expanded (runs out of memory): CSON_RC_AllocError
1995
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1996
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example usage:
1997
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1998
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
1999
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer buf = cson_buffer_empty;
2000
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// optional: cson_buffer_reserve(&buf, 1024 * 10);
2001
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_output_buffer( myValue, &buf, NULL );
2002
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( 0 != rc ) {
2003
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... error! ...
2004
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2005
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else {
2006
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... use buffer ...
2007
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
puts((char const*)buf.mem);
2008
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2009
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// In both cases, we eventually need to clean up the buffer:
2010
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer_reserve( &buf, 0 );
2011
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// Or take over ownership of its memory:
2012
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
2013
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
char * mem = (char *)buf.mem;
2014
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
buf = cson_buffer_empty;
2015
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
2016
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
free(mem);
2017
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2018
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2019
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2020
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@see cson_output()
2021
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2022
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2023
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_output_buffer( cson_value const * v, cson_buffer * buf,
2024
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_output_opt const * opt );
2025
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2026
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2027
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This works identically to cson_parse_string(), but takes a
2028
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer object as its input. buf->used bytes of buf->mem are
2029
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
assumed to be valid JSON input, but it need not be NUL-terminated
2030
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(we only read up to buf->used bytes). The value of buf->used is
2031
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
assumed to be the "string length" of buf->mem, i.e. not including
2032
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the NUL terminator.
2033
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2034
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success, non-0 on error.
2035
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2036
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See cson_parse() for the semantics of the tgt, opt, and err
2037
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parameters.
2038
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2039
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_parse_buffer( cson_value ** tgt, cson_buffer const * buf,
2040
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_parse_opt const * opt, cson_parse_info * err );
2041
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2042
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2043
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2044
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Reserves the given amount of memory for the given buffer object.
2045
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2046
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If n is 0 then buf->mem is freed and its state is set to
2047
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NULL/0 values.
2048
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2049
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If buf->capacity is less than or equal to n then 0 is returned and
2050
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
buf is not modified.
2051
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2052
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If n is larger than buf->capacity then buf->mem is (re)allocated
2053
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and buf->capacity contains the new length. Newly-allocated bytes
2054
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are filled with zeroes.
2055
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2056
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success 0 is returned. On error non-0 is returned and buf is not
2057
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
modified.
2058
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2059
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
buf->mem is owned by buf and must eventually be freed by passing an
2060
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
n value of 0 to this function.
2061
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2062
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
buf->used is never modified by this function unless n is 0, in which case
2063
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
it is reset.
2064
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2065
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_buffer_reserve( cson_buffer * buf, cson_size_t n );
2066
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2067
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2068
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fills all bytes of the given buffer with the given character.
2069
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the number of bytes set (buf->capacity), or 0 if
2070
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
!buf or buf has no memory allocated to it.
2071
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2072
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_size_t cson_buffer_fill( cson_buffer * buf, char c );
2073
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2074
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2075
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Uses a cson_data_source_f() function to buffer input into a
2076
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer.
2077
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2078
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
dest must be a non-NULL, initialized (though possibly empty)
2079
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer object. Its contents, if any, will be overwritten by
2080
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this function, and any memory it holds might be re-used.
2081
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2082
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The src function is called, and passed the state parameter, to
2083
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fetch the input. If it returns non-0, this function returns that
2084
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
error code. src() is called, possibly repeatedly, until it reports
2085
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
that there is no more data.
2086
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2087
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Whether or not this function succeeds, dest still owns any memory
2088
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pointed to by dest->mem, and the client must eventually free it by
2089
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
calling cson_buffer_reserve(dest,0).
2090
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2091
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
dest->mem might (and possibly will) be (re)allocated by this
2092
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function, so any pointers to it held from before this call might be
2093
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
invalidated by this call.
2094
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2095
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error non-0 is returned and dest has almost certainly been
2096
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
modified but its state must be considered incomplete.
2097
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2098
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Errors include:
2099
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- dest or src are NULL (CSON_RC_ArgError)
2101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Allocation error (CSON_RC_AllocError)
2103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- src() returns an error code
2105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Whether or not the state parameter may be NULL depends on
2107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the src implementation requirements.
2108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success dest will contain the contents read from the input
2110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
source. dest->used will be the length of the read-in data, and
2111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
dest->mem will point to the memory. dest->mem is automatically
2112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NUL-terminated if this function succeeds, but dest->used does not
2113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
count that terminator. On error the state of dest->mem must be
2114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
considered incomplete, and is not guaranteed to be NUL-terminated.
2115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example usage:
2117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer buf = cson_buffer_empty;
2120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_buffer_fill_from( &buf,
2121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_data_source_FILE,
2122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stdin );
2123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( rc )
2124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
2125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fprintf(stderr,"Error %d (%s) while filling buffer.\n",
2126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
rc, cson_rc_string(rc));
2127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer_reserve( &buf, 0 );
2128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return ...;
2129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... use the buf->mem ...
2131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... clean up the buffer ...
2132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_buffer_reserve( &buf, 0 );
2133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
To take over ownership of the buffer's memory, do:
2136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
void * mem = buf.mem;
2139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
buf = cson_buffer_empty;
2140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In which case the memory must eventually be passed to free() to
2143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
free it.
2144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_buffer_fill_from( cson_buffer * dest, cson_data_source_f src, void * state );
2146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Increments the reference count for the given value. This is a
2150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
low-level operation and should not normally be used by client code
2151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
without understanding exactly what side-effects it introduces.
2152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Mis-use can lead to premature destruction or cause a value instance
2153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to never be properly destructed (i.e. a memory leak).
2154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function is probably only useful for the following cases:
2156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- You want to hold a reference to a value which is itself contained
2158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in one or more containers, and you need to be sure that your
2159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
reference outlives the container(s) and/or that you can free your
2160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
copy of the reference without invaliding any references to the same
2161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value held in containers.
2162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- You want to implement "value sharing" behaviour without using an
2164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object or array to contain the shared value. This can be used to
2165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ensure the lifetime of the shared value instance. Each sharing
2166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
point adds a reference and simply passed the value to
2167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free() when they're done. The object will be kept alive
2168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for other sharing points which added a reference.
2169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Normally any such value handles would be invalidated when the
2171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parent container(s) is/are cleaned up, but this function can be
2172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
used to effectively delay the cleanup.
2173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function, at its lowest level, increments the value's
2175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
reference count by 1.
2176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
To decrement the reference count, pass the value to
2178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free(), after which the value must be considered, from
2179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the perspective of that client code, to be destroyed (though it
2180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
will not be if there are still other live references to
2181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
it). cson_value_free() will not _actually_ destroy the value until
2182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
its reference count drops to 0.
2183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success. The only error conditions are if v is NULL
2185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(CSON_RC_ArgError) or if the reference increment would overflow
2186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(CSON_RC_RangeError). In theory a client would get allocation
2187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
errors long before the reference count could overflow (assuming
2188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
those reference counts come from container insertions, as opposed
2189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to via this function).
2190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Insider notes which clients really need to know:
2192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For shared/constant value instances, such as those returned by
2194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_true() and cson_value_null(), this function has no side
2195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
effects - it does not actually modify the reference count because
2196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(A) those instances are shared across all client code and (B) those
2197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
objects are static and never get cleaned up. However, that is an
2198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
implementation detail which client code should not rely on. In
2199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
other words, if you call cson_value_add_reference() 3 times using
2200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the value returned by cson_value_true() (which is incidentally a
2201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
shared cson_value instance), you must eventually call
2202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free() 3 times to (semantically) remove those
2203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
references. However, internally the reference count for that
2204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
specific cson_value instance will not be modified and those
2205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
objects will never be freed (they're stack-allocated).
2206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It might be interesting to note that newly-created objects
2208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
have a reference count of 0 instead of 1. This is partly because
2209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if the initial reference is counted then it makes ownership
2210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
problematic when inserting values into containers. e.g. consider the
2211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
following code:
2212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// ACHTUNG: this code is hypothetical and does not reflect
2215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// what actually happens!
2216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * v =
2217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_new_integer( 42 ); // v's refcount = 1
2218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array_append( myArray, v ); // v's refcount = 2
2219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If that were the case, the client would be forced to free his own
2222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
reference after inserting it into the container (which is a bit
2223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
counter-intuitive as well as intrusive). It would look a bit like
2224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the following and would have to be done after every create/insert
2225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
operation:
2226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// ACHTUNG: this code is hypothetical and does not reflect
2229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// what actually happens!
2230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array_append( myArray, v ); // v's refcount = 2
2231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free( v ); // v's refcount = 1
2232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(As i said: it's counter-intuitive and intrusive.)
2235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Instead, values start with a refcount of 0 and it is only increased
2237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
when the value is added to an object/array container or when this
2238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function is used to manually increment it. cson_value_free() treats
2239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a refcount of 0 or 1 equivalently, destroying the value
2240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
instance. The only semantic difference between 0 and 1, for
2241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
purposes of cleaning up, is that a value with a non-0 refcount has
2242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
been had its refcount adjusted, whereas a 0 refcount indicates a
2243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fresh, "unowned" reference.
2244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_add_reference( cson_value * v );
2246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if 0
2248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
DO NOT use this unless you know EXACTLY what you're doing.
2250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It is only in the public API to work around a couple corner
2251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cases involving extracting child elements and discarding
2252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
their parents.
2253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function sets v's reference count to the given value.
2255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It does not clean up the object if rc is 0.
2256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success, non-0 on error.
2258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_value_refcount_set( cson_value * v, unsigned short rc );
2260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
2261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Deeply copies a JSON value, be it an object/array or a "plain"
2264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value (e.g. number/string/boolean). If cv is not NULL then this
2265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function makes a deep clone of it and returns that clone. Ownership
2266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of the clone is identical t transfered to the caller, who must
2267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
eventually free the value using cson_value_free() or add it to a
2268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
container object/array to transfer ownership to the container. The
2269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returned object will be of the same logical type as orig.
2270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ACHTUNG: if orig contains any cyclic references at any depth level
2272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this function will endlessly recurse. (Having _any_ cyclic
2273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
references violates this library's requirements.)
2274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns NULL if orig is NULL or if cloning fails. Assuming that
2276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
orig is in a valid state, the only "likely" error case is that an
2277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
allocation fails while constructing the clone. In other words, if
2278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cloning fails due to something other than an allocation error then
2279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
either orig is in an invalid state or there is a bug.
2280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
When this function clones Objects or Arrays it shares any immutable
2282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
values (including object keys) between the parent and the
2283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
clone. Mutable values (Objects and Arrays) are copied, however.
2284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For example, if we clone:
2285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{ a: 1, b: 2, c:["hi"] }
2288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The cloned object and the array "c" would be a new Object/Array
2291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
instances but the object keys (a,b,b) and the values of (a,b), as
2292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
well as the string value within the "c" array, would be shared
2293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
between the original and the clone. The "c" array itself would be
2294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
deeply cloned, such that future changes to the clone are not
2295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
visible to the parent, and vice versa, but immutable values within
2296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the array are shared (in this case the string "hi"). The
2297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
justification for this heuristic is that immutable values can never
2298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
be changed, so there is no harm in sharing them across
2299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
clones. Additionally, such types can never contribute to cycles in
2300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a JSON tree, so they are safe to share this way. Objects and
2301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Arrays, on the other hand, can be modified later and can contribute
2302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to cycles, and thus the clone needs to be an independent instance.
2303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note, however, that if this function directly passed a
2304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
non-Object/Array, that value is deeply cloned. The sharing
2305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
behaviour only applies when traversing Objects/Arrays.
2306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_value_clone( cson_value const * orig );
2308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns the value handle associated with s. The handle itself owns
2311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
s, and ownership of the handle is not changed by calling this
2312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function. If the returned handle is part of a container, calling
2313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free() on the returned handle invoked undefined
2314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
behaviour (quite possibly downstream when the container tries to
2315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
use it).
2316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function only returns NULL if s is NULL. The length of the
2318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returned string is cson_string_length_bytes().
2319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_string_value(cson_string const * s);
2321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The Object form of cson_string_value(). See that function
2323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for full details.
2324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_object_value(cson_object const * s);
2326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The Array form of cson_string_value(). See that function
2329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for full details.
2330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_array_value(cson_array const * s);
2332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Calculates the approximate in-memory-allocated size of v,
2336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
recursively if it is a container type, with the following caveats
2337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and limitations:
2338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If a given value is reference counted and encountered multiple
2340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
times within a traversed container, each reference is counted at
2341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
full cost. We have no way of knowing if a given reference has been
2342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
visited already and whether it should or should not be counted, so
2343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
we pessimistically count them even though the _might_ not really
2344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
count for the given object tree (it depends on where the other open
2345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
references live).
2346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This function returns 0 if any of the following are true:
2348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- v is NULL
2350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- v is one of the special singleton values (null, bools, empty
2352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
string, int 0, double 0.0)
2353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All other values require an allocation, and this will return their
2355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
total memory cost, including the cson-specific internals and the
2356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
native value(s).
2357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that because arrays and objects might have more internal slots
2359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
allocated than used, the alloced size of a container does not
2360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
necessarily increase when a new item is inserted into it. An interesting
2361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
side-effect of this is that when cson_clone()ing an array or object, the
2362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
size of the clone can actually be less than the original.
2363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unsigned int cson_value_msize(cson_value const * v);
2365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Parses command-line-style arguments into a JSON object.
2368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It expects arguments to be in any of these forms, and any number
2370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of leading dashes are treated identically:
2371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--key : Treats key as a boolean with a true value.
2373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--key=VAL : Treats VAL as either a double, integer, or string.
2375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--key= : Treats key as a JSON null (not literal NULL) value.
2377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Arguments not starting with a dash are skipped.
2379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Each key/value pair is inserted into an object. If a given key
2381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
appears more than once then only the final entry is actually
2382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stored.
2383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
argc and argv are expected to be values from main() (or similar,
2385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
possibly adjusted to remove argv[0]).
2386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tgt must be either a pointer to NULL or a pointer to a
2388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
client-provided Object. If (NULL==*tgt) then this function
2389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
allocates a new object and on success it stores the new object in
2390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*tgt (it is owned by the caller). If (NULL!=*tgt) then it is
2391
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
assumed to be a properly allocated object. DO NOT pass a pointer to
2392
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
an unitialized pointer, as that will fool this function into
2393
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
thinking it is a valid object and Undefined Behaviour will ensue.
2394
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2395
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If count is not NULL then the number of arugments parsed by this
2396
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function are assigned to it. On error, count will be the number of
2397
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
options successfully parsed before the error was encountered.
2398
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2399
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success:
2400
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2401
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- 0 is returned.
2402
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2403
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If (*tgt==NULL) then *tgt is assigned to a newly-allocated
2404
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
object, owned by the caller. Note that even if no arguments are
2405
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parsed, the object is still created.
2406
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2407
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error:
2408
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2409
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- non-0 is returned
2410
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2411
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If (*tgt==NULL) then it is not modified.
2412
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2413
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- If (*tgt!=NULL) (i.e., the caller provides his own object) then
2414
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
it might contain partial results.
2415
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2416
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_parse_argv_flags( int argc, char const * const * argv,
2417
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_object ** tgt, unsigned int * count );
2418
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2419
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2420
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Return values for the cson_pack() and cson_unpack() interfaces.
2421
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2422
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
enum cson_pack_retval {
2423
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signals an out-of-memory error. */
2424
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_PACK_ALLOC_ERROR = -1,
2425
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** Signals a syntax error in the format string. */
2426
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_PACK_ARG_ERROR = -2,
2427
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2428
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signals an that an internal error has occurred.
2429
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This indicates a bug in this library.
2430
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2431
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_PACK_INTERNAL_ERROR = -3,
2432
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2433
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Signals that the JSON document does not validate agains the format
2434
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
string passed to cson_unpack().
2435
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2436
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CSON_PACK_VALIDATION_ERROR = -4
2437
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
2438
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2439
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2440
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Construct arbitrarily complex JSON documents from native C types.
2441
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2442
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Create a new object or array and add or merge the passed values and
2443
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties to it according to the supplied format string.
2444
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2445
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fmt is a format string, it must at least contain an array or object
2446
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
specifier as its root value. Format specifiers start with a percent sign '\%'
2447
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
followed by one or more modifiers and a type character. Object properties
2448
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are specified as key-value pairs where the key is specified as a string and
2449
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
passed as an argument of const char *. Any space, tab, carriage return, line
2450
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
feed, colon and comma characters between format specifiers are ignored.
2451
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2452
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Type | Description |
2453
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| :--: | :---------- |
2454
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| s | creates either a property name or a string value, in case of the former the corresponding argument is a pointer to const char which is a sequence of bytes specifying the name of the property that is to be created, in case of the latter the corresponding argument is a pointer to const char |
2455
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| d | creates an integer value, the corresponding argument is an int |
2456
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| i | ^ |
2457
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| f | creates a floating point value, the corresponding argument is a double |
2458
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| b | creates a boolean value, the corresponding argument is an int |
2459
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| N | creates a null value |
2460
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| [...] | creates an array, the corresponding argument is a pointer to a cson_array |
2461
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| {...} | creates an array, the corresponding argument is a pointer to a cson_object |
2462
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2463
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Modifier | Description |
2464
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| :------: | :---------- |
2465
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| l | specifies that the following d or i specifier applies to an argument which is a pointer to long |
2466
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| ll | specifies that the following d or i specifier applies to an argument which is a pointer to cson_int_t |
2467
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2468
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Short Form | Expands to
2469
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| :--------: | :--------- |
2470
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| {...} | %*{...} |
2471
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| [...] | %*[...] |
2472
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| \%D | \%lld |
2473
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2474
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2475
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success. The error conditions are:
2476
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2477
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_PACK_ARG_ERROR: fmt contains a syntax error
2478
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2479
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_PACK_ALLOC_ERROR: a memory allocation failed
2480
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2481
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_PACK_INTERNAL_ERROR: an internal error has occurred, this is a bug in
2482
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson
2483
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2484
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example:
2485
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2486
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * root_value;
2487
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array * arr;
2488
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
2489
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
rc = cson_pack( root_value, "{%s: %d, %s: %[]}", "foo", 42, "bar", arr );
2490
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( 0 != rc ) {
2491
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... error ...
2492
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2493
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2494
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2495
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_pack( cson_value **root_valuep, const char *fmt, ... );
2496
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2497
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2498
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Same as cson_pack() except that it takes a va_list instead of a variable
2499
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
number of arguments.
2500
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2501
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_vpack( cson_value **root_valuep, const char *fmt, va_list args );
2502
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2503
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2504
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Iterate over the given object or array and convert an arbitrary number of
2505
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
JSON values into their native C types or validates them according to the
2506
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
given format string fmt.
2507
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2508
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fmt is a format string, it must at least contain an array or object
2509
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
specifier as its root value. Format specifiers start with a percent sign '\%'
2510
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
followed by one or more modifiers and a type character. Object properties
2511
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are specified as key-value pairs where the key is specified as a string and
2512
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
passed as an argument of const char *. Any space, tab, carriage return, line
2513
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
feed, colon and comma characters between format specifiers are ignored.
2514
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2515
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Type | Description |
2516
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| :--: | :---------- |
2517
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| s | matches a either a property name or a string value, in case of the former the corresponding argument is a pointer to const char which is a sequence of bytes specifying the name of the property that is to be matched, in case of the latter the corresponding argument is a pointer to a pointer to const char unless the 'm' modifier is specified where the the corresponding argument is a pointer to a pointer to char |
2518
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| d | matches an integer value and must be used in with the "ll" modifier, the corresponding argument is a pointer to cson_int_t |
2519
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| i | ^ |
2520
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| f | matches a floating point value, the corresponding argument is a pointer to double |
2521
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| b | matches a boolean value, the corresponding argument is a pointer to int |
2522
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| N | matches a null value |
2523
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| [...] | matches an array, the corresponding argument is a pointer to a pointer to a cson_array |
2524
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| {...} | matches an array, the corresponding argument is a pointer to a pointer to a cson_object |
2525
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2526
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Modifier | Description |
2527
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| :------: | :---------- |
2528
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| ? | specifies that the property reffered to by the given property name is optional |
2529
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| * | suppresses assignment, only check for the presence and type of the specified value |
2530
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| m | allocates a memory buffer for the extracted string |
2531
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| ll | specifies that the following d or i specifier applies to an argument which is a pointer to cson_int_t |
2532
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2533
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Short Form | Expands to
2534
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| :--------: | :--------- |
2535
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| {...} | %*{...} |
2536
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| [...] | %*[...] |
2537
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| \%D | \%lld |
2538
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2539
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success. The error conditions are:
2540
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2541
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_PACK_ARG_ERROR: fmt contains a syntax error
2542
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2543
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_PACK_ALLOC_ERROR: a memory allocation failed
2544
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2545
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_PACK_VALIDATION_ERROR: validation failed, the JSON document structure
2546
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
differs from that described by the format string
2547
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2548
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CSON_PACK_INTERNAL_ERROR: an internal error has occurred, this
2549
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
indicates a bug in this library.
2550
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2551
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example:
2552
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2553
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * root_value;
2554
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_int_t x = 0;
2555
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array * arr = NULL;
2556
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const char *str = NULL;
2557
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
2558
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
rc = cson_unpack( root_value, "{%s: %d, %s: %[], %?s: %s}", "foo", &x, "bar", &arr, "baz", &str );
2559
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( rc < 3 && rc >= 0 ) {
2560
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... optional property is missing ...
2561
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if ( CSON_PACK_ALLOC_ERROR == rc ) {
2562
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... out of memory error ...
2563
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if ( CSON_PACK_VALIDATION_ERROR == rc ) {
2564
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... unexpected JSON document structure ...
2565
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if ( rc ) {
2566
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
... internal error ...
2567
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2568
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2569
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2570
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2571
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_unpack( cson_value *root_value, const char *fmt, ... );
2572
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2573
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2574
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Same as cson_unpack() except that it takes a va_list instead of a variable
2575
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
number of arguments.
2576
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2577
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_vunpack( cson_value *root_value, const char *fmt, va_list args );
2578
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2579
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/* LICENSE
2580
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2581
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This software's source code, including accompanying documentation and
2582
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
demonstration applications, are licensed under the following
2583
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
conditions...
2584
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2585
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Certain files are imported from external projects and have their own
2586
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
licensing terms. Namely, the JSON_parser.* files. See their files for
2587
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
their official licenses, but the summary is "do what you want [with
2588
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
them] but leave the license text and copyright in place."
2589
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2590
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The author (Stephan G. Beal [http://wanderinghorse.net/home/stephan/])
2591
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
explicitly disclaims copyright in all jurisdictions which recognize
2592
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
such a disclaimer. In such jurisdictions, this software is released
2593
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
into the Public Domain.
2594
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2595
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In jurisdictions which do not recognize Public Domain property
2596
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(e.g. Germany as of 2011), this software is Copyright (c) 2011 by
2597
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Stephan G. Beal, and is released under the terms of the MIT License
2598
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(see below).
2599
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2600
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In jurisdictions which recognize Public Domain property, the user of
2601
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this software may choose to accept it either as 1) Public Domain, 2)
2602
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
under the conditions of the MIT License (see below), or 3) under the
2603
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
terms of dual Public Domain/MIT License conditions described here, as
2604
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
they choose.
2605
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2606
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The MIT License is about as close to Public Domain as a license can
2607
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
get, and is described in clear, concise terms at:
2608
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2609
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
http://en.wikipedia.org/wiki/MIT_License
2610
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2611
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The full text of the MIT License follows:
2612
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2613
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--
2614
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Copyright (c) 2011 Stephan G. Beal (http://wanderinghorse.net/home/stephan/)
2615
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2616
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Permission is hereby granted, free of charge, to any person
2617
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
obtaining a copy of this software and associated documentation
2618
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files (the "Software"), to deal in the Software without
2619
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
restriction, including without limitation the rights to use,
2620
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
copy, modify, merge, publish, distribute, sublicense, and/or sell
2621
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
copies of the Software, and to permit persons to whom the
2622
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Software is furnished to do so, subject to the following
2623
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
conditions:
2624
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2625
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The above copyright notice and this permission notice shall be
2626
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
included in all copies or substantial portions of the Software.
2627
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2628
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
2629
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
2630
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
2631
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
2632
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
2633
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2634
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2635
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
OTHER DEALINGS IN THE SOFTWARE.
2636
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2637
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--END OF MIT LICENSE--
2638
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2639
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For purposes of the above license, the term "Software" includes
2640
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
documentation and demonstration source code which accompanies
2641
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this software. ("Accompanies" = is contained in the Software's
2642
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
primary public source code repository.)
2643
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2644
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2645
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2646
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if defined(__cplusplus)
2647
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} /*extern "C"*/
2648
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
2649
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2650
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif /* WANDERINGHORSE_NET_CSON_H_INCLUDED */
2651
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/* end file include/wh/cson/cson.h */
2652
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/* begin file include/wh/cson/cson_sqlite3.h */
2653
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/** @file cson_sqlite3.h
2654
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2655
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This file contains cson's public sqlite3-to-JSON API declarations
2656
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and API documentation. If CSON_ENABLE_SQLITE3 is not defined,
2657
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
or is defined to 0, then including this file will have no side-effects
2658
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
other than defining CSON_ENABLE_SQLITE3 (if it was not defined) to 0
2659
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and defining a few include guard macros. i.e. if CSON_ENABLE_SQLITE3
2660
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
is not set to a true value then the API is not visible.
2661
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2662
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This API requires that <sqlite3.h> be in the INCLUDES path and that
2663
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the client eventually link to (or directly embed) the sqlite3 library.
2664
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2665
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if !defined(WANDERINGHORSE_NET_CSON_SQLITE3_H_INCLUDED)
2666
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define WANDERINGHORSE_NET_CSON_SQLITE3_H_INCLUDED 1
2667
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if !defined(CSON_ENABLE_SQLITE3)
2668
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# if defined(DOXYGEN)
2669
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_ENABLE_SQLITE3 1
2670
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# else
2671
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#define CSON_ENABLE_SQLITE3 1
2672
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# endif
2673
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
2674
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2675
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if CSON_ENABLE_SQLITE3 /* we do this here for the sake of the amalgamation build */
2676
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#include "sqlite3.h"
2677
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2678
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if defined(__cplusplus)
2679
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
extern "C" {
2680
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
2681
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2682
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2683
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Converts a single value from a single 0-based column index to its JSON
2684
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
equivalent.
2685
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2686
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success it returns a new JSON value, which will have a different concrete
2687
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
type depending on the field type reported by sqlite3_column_type(st,col):
2688
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2689
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Integer, double, null, or string (TEXT and BLOB data, though not
2690
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
all blob data is legal for a JSON string).
2691
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2692
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
st must be a sqlite3_step()'d row and col must be a 0-based column
2693
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
index within that result row.
2694
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2695
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_sqlite3_column_to_value( sqlite3_stmt * st, int col );
2696
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2697
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2698
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Creates a JSON Array object containing the names of all columns
2699
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of the given prepared statement handle.
2700
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2701
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns a new array value on success, which the caller owns. Its elements
2702
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are in the same order as in the underlying query.
2703
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2704
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error NULL is returned.
2705
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2706
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
st is not traversed or freed by this function - only the column
2707
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
count and names are read.
2708
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2709
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_sqlite3_column_names( sqlite3_stmt * st );
2710
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2711
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2712
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Creates a JSON Object containing key/value pairs corresponding
2713
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to the result columns in the current row of the given statement
2714
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
handle. st must be a sqlite3_step()'d row result.
2715
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2716
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success a new Object is returned which is owned by the
2717
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
caller. On error NULL is returned.
2718
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2719
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_sqlite3_column_to_value() is used to convert each column to a
2720
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
JSON value, and the column names are taken from
2721
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
sqlite3_column_name().
2722
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2723
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_sqlite3_row_to_object( sqlite3_stmt * st );
2724
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2725
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Functionally almost identical to cson_sqlite3_row_to_object(), the
2726
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
only difference being how the result objects gets its column names.
2727
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
st must be a freshly-step()'d handle holding a result row.
2728
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
colNames must be an Array with at least the same number of columns
2729
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
as st. If it has fewer, NULL is returned and this function has
2730
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
no side-effects.
2731
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2732
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For each column in the result set, the colNames entry at the same
2733
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
index is used for the column key. If a given entry is-not-a String
2734
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
then conversion will fail and NULL will be returned.
2735
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2736
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The one reason to prefer this over cson_sqlite3_row_to_object() is
2737
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
that this one can share the keys across multiple rows (or even
2738
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
other JSON containers), whereas the former makes fresh copies of
2739
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the column names for each row.
2740
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2741
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2742
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_sqlite3_row_to_object2( sqlite3_stmt * st,
2743
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_array * colNames );
2744
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2745
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2746
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Similar to cson_sqlite3_row_to_object(), but creates an Array
2747
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value which contains the JSON-form values of the given result
2748
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
set row.
2749
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2750
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * cson_sqlite3_row_to_array( sqlite3_stmt * st );
2751
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2752
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Converts the results of an sqlite3 SELECT statement to JSON,
2753
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in the form of a cson_value object tree.
2754
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2755
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
st must be a prepared, but not yet traversed, SELECT query.
2756
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tgt must be a pointer to NULL (see the example below). If
2757
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
either of those arguments are NULL, cson_rc.ArgError is returned.
2758
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2759
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This walks the query results and returns a JSON object which
2760
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
has a different structure depending on the value of the 'fat'
2761
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
argument.
2762
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2763
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2764
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If 'fat' is 0 then the structure is:
2765
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2766
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2767
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
2768
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"columns":["colName1",..."colNameN"],
2769
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"rows":[
2770
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[colVal0, ... colValN],
2771
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[colVal0, ... colValN],
2772
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
2773
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
]
2774
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2775
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2776
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2777
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In the "non-fat" format the order of the columns and row values is
2778
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
guaranteed to be the same as that of the underlying query.
2779
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2780
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If 'fat' is not 0 then the structure is:
2781
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2782
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2783
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
2784
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"columns":["colName1",..."colNameN"],
2785
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"rows":[
2786
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{"colName1":value1,..."colNameN":valueN},
2787
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{"colName1":value1,..."colNameN":valueN},
2788
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
2789
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
]
2790
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2791
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2792
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2793
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In the "fat" format, the order of the "columns" entries is guaranteed
2794
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to be the same as the underlying query fields, but the order
2795
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of the keys in the "rows" might be different and might in fact
2796
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
change when passed through different JSON implementations,
2797
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
depending on how they implement object key/value pairs.
2798
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2799
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On success it returns 0 and assigns *tgt to a newly-allocated
2800
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
JSON object tree (using the above structure), which the caller owns.
2801
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If the query returns no rows, the "rows" value will be an empty
2802
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
array, as opposed to null.
2803
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2804
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
On error non-0 is returned and *tgt is not modified.
2805
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2806
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The error code cson_rc.IOError is used to indicate a db-level
2807
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
error, and cson_rc.TypeError is returned if sqlite3_column_count(st)
2808
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
returns 0 or less (indicating an invalid or non-SELECT statement).
2809
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2810
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The JSON data types are determined by the column type as reported
2811
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
by sqlite3_column_type():
2812
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2813
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
SQLITE_INTEGER: integer
2814
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2815
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
SQLITE_FLOAT: double
2816
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2817
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
SQLITE_TEXT or SQLITE_BLOB: string, and this will only work if
2818
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the data is UTF8 compatible.
2819
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2820
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If the db returns a literal or SQL NULL for a value it is converted
2821
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to a JSON null. If it somehow finds a column type it cannot handle,
2822
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the value is also converted to a NULL in the output.
2823
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2824
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Example
2825
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2826
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@code
2827
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value * json = NULL;
2828
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int rc = cson_sqlite3_stmt_to_json( myStatement, &json, 1 );
2829
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if( 0 != rc ) { ... error ... }
2830
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else {
2831
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_output_FILE( json, stdout, NULL );
2832
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cson_value_free( json );
2833
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
2834
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@endcode
2835
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2836
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_sqlite3_stmt_to_json( sqlite3_stmt * st, cson_value ** tgt, char fat );
2837
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2838
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2839
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A convenience wrapper around cson_sqlite3_stmt_to_json(), which
2840
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
takes SQL instead of a sqlite3_stmt object. It has the same
2841
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return value and argument semantics as that function.
2842
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2843
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_sqlite3_sql_to_json( sqlite3 * db, cson_value ** tgt, char const * sql, char fat );
2844
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2845
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/**
2846
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Binds a JSON value to a 1-based parameter index in a prepared SQL
2847
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
statement. v must be NULL or one of one of the types (null, string,
2848
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
integer, double, boolean, array). Booleans are bound as integer 0
2849
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
or 1. NULL or null are bound as SQL NULL. Integers are bound as
2850
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
64-bit ints. Strings are bound using sqlite3_bind_text() (as
2851
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
opposed to text16), but we could/should arguably bind them as
2852
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
blobs.
2853
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2854
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If v is an Array then ndx is is used as a starting position
2855
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(1-based) and each item in the array is bound to the next parameter
2856
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
position (starting and ndx, though the array uses 0-based offsets).
2857
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2858
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
TODO: add Object support for named parameters.
2859
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2860
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns 0 on success, non-0 on error.
2861
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*/
2862
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
int cson_sqlite3_bind_value( sqlite3_stmt * st, int ndx, cson_value const * v );
2863
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2864
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#if defined(__cplusplus)
2865
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} /*extern "C"*/
2866
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif
2867
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2868
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif /* CSON_ENABLE_SQLITE3 */
2869
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif /* WANDERINGHORSE_NET_CSON_SQLITE3_H_INCLUDED */
2870
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
/* end file include/wh/cson/cson_sqlite3.h */
2871
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#endif /* FOSSIL_ENABLE_JSON */
2872
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!