static void libretrodb_write_index_header(int fd, libretrodb_index_t * idx) { rmsgpack_write_map_header(fd, 3); rmsgpack_write_string(fd, "name", strlen("name")); rmsgpack_write_string(fd, idx->name, strlen(idx->name)); rmsgpack_write_string(fd, "key_size", strlen("key_size")); rmsgpack_write_uint(fd, idx->key_size); rmsgpack_write_string(fd, "next", strlen("next")); rmsgpack_write_uint(fd, idx->next); }
int rmsgpack_dom_write(RFILE *fd, const struct rmsgpack_dom_value *obj) { unsigned i; int rv = 0; int written = 0; switch (obj->type) { case RDT_NULL: return rmsgpack_write_nil(fd); case RDT_BOOL: return rmsgpack_write_bool(fd, obj->val.bool_); case RDT_INT: return rmsgpack_write_int(fd, obj->val.int_); case RDT_UINT: return rmsgpack_write_uint(fd, obj->val.uint_); case RDT_STRING: return rmsgpack_write_string(fd, obj->val.string.buff, obj->val.string.len); case RDT_BINARY: return rmsgpack_write_bin(fd, obj->val.binary.buff, obj->val.binary.len); case RDT_MAP: if ((rv = rmsgpack_write_map_header(fd, obj->val.map.len)) < 0) return rv; written += rv; for (i = 0; i < obj->val.map.len; i++) { if ((rv = rmsgpack_dom_write(fd, &obj->val.map.items[i].key)) < 0) return rv; written += rv; if ((rv = rmsgpack_dom_write(fd, &obj->val.map.items[i].value)) < 0) return rv; written += rv; } break; case RDT_ARRAY: if ((rv = rmsgpack_write_array_header(fd, obj->val.array.len)) < 0) return rv; written += rv; for (i = 0; i < obj->val.array.len; i++) { if ((rv = rmsgpack_dom_write(fd, &obj->val.array.items[i])) < 0) return rv; written += rv; } } return written; }
static int libretrodb_write_metadata(int fd, libretrodb_metadata_t *md) { rmsgpack_write_map_header(fd, 1); rmsgpack_write_string(fd, "count", strlen("count")); return rmsgpack_write_uint(fd, md->count); }