Exemple #1
0
static jsonlite_builder jsonlite_builder_configure(void *memory, size_t size, jsonlite_stream stream) {
    jsonlite_builder builder = (jsonlite_builder)memory;
    size_t depth = (size - sizeof(jsonlite_builder_struct)) / sizeof(jsonlite_write_state);
    builder->state = (jsonlite_write_state *)((uint8_t *)builder + sizeof(jsonlite_builder_struct));
    builder->limit = builder->state + depth - 1;
    builder->stack = builder->state;
    builder->stream = stream;
    builder->indentation = 0;
    *builder->state = jsonlite_accept_object_begin | jsonlite_accept_array_begin;
    jsonlite_builder_set_double_format(builder, "%.16g");
    return builder;
}
Exemple #2
0
jsonlite_builder jsonlite_builder_init(size_t depth) {
    jsonlite_builder builder;

    depth = depth < 2 ? 2 : depth;

    builder = (jsonlite_builder)calloc(1, sizeof(jsonlite_builder_struct) + depth * sizeof(jsonlite_write_state));
    builder->first = (jsonlite_builder_buffer *)malloc(sizeof(jsonlite_builder_buffer));
    builder->buffer = builder->first;
    builder->buffer->cursor = builder->buffer->data;
    builder->buffer->limit = builder->buffer->data + sizeof(builder->buffer->data);
    builder->buffer->next = NULL;

    builder->stack = (jsonlite_write_state *)((uint8_t *)builder + sizeof(jsonlite_builder_struct));
    builder->stack_depth = depth;
    builder->state = builder->stack;
    builder->state->accept = jsonlite_accept_object_begin | jsonlite_accept_array_begin;

    builder->indentation = 0;
    jsonlite_builder_set_double_format(builder, "%.16g");
    return builder;
}