RetroArch/libretro-db/rmsgpack_dom.h

82 lines
1.5 KiB
C
Raw Normal View History

2015-01-19 21:47:09 +00:00
#ifndef __RARCHDB_MSGPACK_DOM_H__
#define __RARCHDB_MSGPACK_DOM_H__
#include <stdint.h>
#include <retro_file.h>
2015-01-23 05:05:54 +00:00
#ifdef __cplusplus
extern "C" {
#endif
2015-09-17 05:23:36 +00:00
enum rmsgpack_dom_type
{
2015-01-19 21:47:09 +00:00
RDT_NULL = 0,
RDT_BOOL,
RDT_UINT,
RDT_INT,
RDT_STRING,
RDT_BINARY,
RDT_MAP,
RDT_ARRAY
};
2015-09-17 04:39:17 +00:00
struct rmsgpack_dom_value
{
enum rmsgpack_dom_type type;
union
{
uint64_t uint_;
int64_t int_;
struct
{
uint32_t len;
2015-09-17 07:33:24 +00:00
char *buff;
2015-09-17 04:39:17 +00:00
} string;
struct
{
uint32_t len;
2015-09-17 07:33:24 +00:00
char *buff;
2015-09-17 04:39:17 +00:00
} binary;
int bool_;
struct
{
uint32_t len;
2015-09-17 07:33:24 +00:00
struct rmsgpack_dom_pair *items;
2015-09-17 04:39:17 +00:00
} map;
struct
{
uint32_t len;
2015-09-17 07:33:24 +00:00
struct rmsgpack_dom_value *items;
2015-09-17 04:39:17 +00:00
} array;
} val;
2015-01-19 21:47:09 +00:00
};
2015-09-17 05:23:36 +00:00
struct rmsgpack_dom_pair
{
2015-01-19 21:47:09 +00:00
struct rmsgpack_dom_value key;
struct rmsgpack_dom_value value;
};
2015-09-17 07:33:24 +00:00
void rmsgpack_dom_value_print(struct rmsgpack_dom_value *obj);
void rmsgpack_dom_value_free(struct rmsgpack_dom_value *v);
2015-01-19 21:47:09 +00:00
int rmsgpack_dom_value_cmp(
2015-09-17 07:33:24 +00:00
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);
2015-01-19 21:47:09 +00:00
int rmsgpack_dom_read(RFILE *fd, struct rmsgpack_dom_value *out);
2015-01-19 21:47:09 +00:00
int rmsgpack_dom_write(RFILE *fd, const struct rmsgpack_dom_value *obj);
2015-01-23 05:05:54 +00:00
int rmsgpack_dom_read_into(RFILE *fd, ...);
2015-01-23 05:05:54 +00:00
#ifdef __cplusplus
}
#endif
2015-01-19 21:47:09 +00:00
#endif