RetroArch/libretro-db/rmsgpack_dom.h

88 lines
1.4 KiB
C
Raw Normal View History

2015-01-19 21:47:09 +00:00
#ifndef __RARCHDB_MSGPACK_DOM_H__
#define __RARCHDB_MSGPACK_DOM_H__
2015-05-30 16:17:11 +00:00
#include <stdio.h>
2015-01-19 21:47:09 +00:00
#include <stdint.h>
2015-01-23 05:05:54 +00:00
#ifdef __cplusplus
extern "C" {
#endif
2015-01-19 21:47:09 +00:00
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_;
2015-06-26 18:33:40 +00:00
struct
{
2015-01-19 21:47:09 +00:00
uint32_t len;
char * buff;
} string;
2015-06-26 18:33:40 +00:00
struct
{
2015-01-19 21:47:09 +00:00
uint32_t len;
char * buff;
} binary;
2015-06-26 18:33:40 +00:00
2015-01-19 21:47:09 +00:00
int bool_;
2015-06-26 18:33:40 +00:00
struct
{
2015-01-19 21:47:09 +00:00
uint32_t len;
struct rmsgpack_dom_pair * items;
} map;
2015-06-26 18:33:40 +00:00
struct
{
2015-01-19 21:47:09 +00:00
uint32_t len;
struct rmsgpack_dom_value * items;
} array;
2015-06-26 18:33:40 +00:00
} val;
2015-01-19 21:47:09 +00:00
};
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(
2015-05-30 16:17:11 +00:00
FILE *fp,
2015-01-19 21:47:09 +00:00
struct rmsgpack_dom_value * out
);
int rmsgpack_dom_write(
2015-05-30 16:17:11 +00:00
FILE *fp,
2015-01-19 21:47:09 +00:00
const struct rmsgpack_dom_value * obj
);
2015-01-23 05:05:54 +00:00
2015-05-30 16:17:11 +00:00
int rmsgpack_dom_read_into(FILE *fp, ...);
2015-01-23 05:05:54 +00:00
#ifdef __cplusplus
}
#endif
2015-01-19 21:47:09 +00:00
#endif