22 #include "epicsMath.h" 60 if (va_arg(ap,
int)) g->
flags |= opt;
61 else g->
flags &= ~opt;
64 const char *indent = va_arg(ap,
const char *);
66 for (; *indent; indent++) {
83 g->
ctx = va_arg(ap,
void *);
116 memset((
void *) g, 0,
sizeof(
struct yajl_gen_t));
135 if (g->state[g->depth] == yajl_gen_map_key || \ 136 g->state[g->depth] == yajl_gen_in_array) { \ 137 g->print(g->ctx, ",", 1); \ 138 if ((g->flags & yajl_gen_beautify)) g->print(g->ctx, "\n", 1); \ 139 } else if (g->state[g->depth] == yajl_gen_map_val) { \ 140 g->print(g->ctx, ":", 1); \ 141 if ((g->flags & yajl_gen_beautify)) g->print(g->ctx, " ", 1); \ 144 #define INSERT_WHITESPACE \ 145 if ((g->flags & yajl_gen_beautify)) { \ 146 if (g->state[g->depth] != yajl_gen_map_val) { \ 148 for (_i=0;_i<g->depth;_i++) \ 151 (unsigned int)strlen(g->indentString)); \ 155 #define ENSURE_NOT_KEY \ 156 if (g->state[g->depth] == yajl_gen_map_key || \ 157 g->state[g->depth] == yajl_gen_map_start) { \ 158 return yajl_gen_keys_must_be_strings; \ 163 #define ENSURE_VALID_STATE \ 164 if (g->state[g->depth] == yajl_gen_error) { \ 165 return yajl_gen_in_error_state;\ 166 } else if (g->state[g->depth] == yajl_gen_complete) { \ 167 return yajl_gen_generation_complete; \ 170 #define INCREMENT_DEPTH \ 171 if (++(g->depth) >= YAJL_MAX_DEPTH) return yajl_max_depth_exceeded; 173 #define DECREMENT_DEPTH \ 174 if (--(g->depth) >= YAJL_MAX_DEPTH) return yajl_max_depth_exceeded; 176 #define APPENDED_ATOM \ 177 switch (g->state[g->depth]) { \ 178 case yajl_gen_start: \ 179 g->state[g->depth] = yajl_gen_complete; \ 181 case yajl_gen_map_start: \ 182 case yajl_gen_map_key: \ 183 g->state[g->depth] = yajl_gen_map_val; \ 185 case yajl_gen_array_start: \ 186 g->state[g->depth] = yajl_gen_in_array; \ 188 case yajl_gen_map_val: \ 189 g->state[g->depth] = yajl_gen_map_key; \ 195 #define FINAL_NEWLINE \ 196 if ((g->flags & yajl_gen_beautify) && g->state[g->depth] == yajl_gen_complete) \ 197 g->print(g->ctx, "\n", 1); 204 sprintf(i,
"%lld", number);
205 g->
print(g->
ctx, i, (
unsigned int)strlen(i));
218 sprintf(i,
"%.20g", number);
219 g->
print(g->
ctx, i, (
unsigned int)strlen(i));
260 g->
print(g->
ctx,
"null", strlen(
"null"));
269 const char * val =
boolean ?
"true" :
"false";
272 g->
print(g->
ctx, val, (
unsigned int)strlen(val));
struct yajl_gen_t * yajl_gen
yajl_gen_status yajl_gen_array_open(yajl_gen g)
int yajl_string_validate_utf8(const unsigned char *s, size_t len)
#define YA_MALLOC(afs, sz)
yajl_gen_status yajl_gen_number(yajl_gen g, const char *s, size_t l)
int yajl_gen_config(yajl_gen g, yajl_gen_option opt,...)
#define YA_FREE(afs, ptr)
Interface to YAJL's JSON generation facilities.
yajl_buf yajl_buf_alloc(yajl_alloc_funcs *alloc)
yajl_gen_status yajl_gen_get_buf(yajl_gen g, const unsigned char **buf, size_t *len)
#define INSERT_WHITESPACE
yajl_gen_state state[YAJL_MAX_DEPTH]
void yajl_set_default_alloc_funcs(yajl_alloc_funcs *yaf)
void yajl_gen_clear(yajl_gen g)
size_t yajl_buf_len(yajl_buf buf)
yajl_realloc_func realloc
yajl_gen_status yajl_gen_bool(yajl_gen g, int boolean)
void yajl_buf_append(yajl_buf buf, const void *data, size_t len)
#define ENSURE_VALID_STATE
void yajl_gen_free(yajl_gen g)
yajl_gen_status yajl_gen_map_close(yajl_gen g)
yajl_gen_status yajl_gen_null(yajl_gen g)
yajl_gen yajl_gen_alloc(const yajl_alloc_funcs *afs)
yajl_gen_status yajl_gen_double(yajl_gen g, double number)
void yajl_buf_clear(yajl_buf buf)
yajl_gen_status yajl_gen_integer(yajl_gen g, long long int number)
yajl_gen_status yajl_gen_map_open(yajl_gen g)
void yajl_buf_free(yajl_buf buf)
const char * indentString
void(* yajl_print_t)(void *ctx, const char *str, size_t len)
void yajl_string_encode(const yajl_print_t print, void *ctx, const unsigned char *str, size_t len, int escape_solidus)
const unsigned char * yajl_buf_data(yajl_buf buf)
yajl_gen_status yajl_gen_array_close(yajl_gen g)
yajl_gen_status yajl_gen_string(yajl_gen g, const unsigned char *str, size_t len)