RetroArch/rarchdb/rmsgpack_dom.h
2014-12-30 21:02:15 +01:00

57 lines
1.3 KiB
C

#ifndef __RARCHDB_MSGPACK_DOM_H__
#define __RARCHDB_MSGPACK_DOM_H__
#include <stdint.h>
enum rmsgpack_dom_type {
RDT_NULL = 0,
RDT_BOOL,
RDT_UINT,
RDT_INT,
RDT_STRING,
RDT_BINARY,
RDT_MAP,
RDT_ARRAY
};
struct rmsgpack_dom_value {
enum rmsgpack_dom_type type;
union {
uint64_t uint_;
int64_t int_;
struct {
uint32_t len;
char* buff;
} string;
struct {
uint32_t len;
char* buff;
} binary;
int bool_;
struct {
uint32_t len;
struct rmsgpack_dom_pair *items;
} map;
struct {
uint32_t len;
struct rmsgpack_dom_value *items;
} array;
};
};
struct rmsgpack_dom_pair {
struct rmsgpack_dom_value key;
struct rmsgpack_dom_value value;
};
void rmsgpack_dom_value_print(struct rmsgpack_dom_value *obj);
void rmsgpack_dom_value_free(struct rmsgpack_dom_value *v);
int rmsgpack_dom_value_cmp(const struct rmsgpack_dom_value *a, const struct rmsgpack_dom_value *b);
struct rmsgpack_dom_value *rmsgpack_dom_value_map_value(const struct rmsgpack_dom_value *map, const struct rmsgpack_dom_value *key);
int rmsgpack_dom_read(int fd, struct rmsgpack_dom_value *out);
int rmsgpack_dom_write(int fd, const struct rmsgpack_dom_value *obj);
int rmsgpack_dom_read_into(int fd, ...);
#endif