pokeplatinum/tools/dataproc/lib/include/dataproc.h

116 lines
2.8 KiB
C

#ifndef DATAPROC_H
#define DATAPROC_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
enum format {
DATAPROC_F_NONE = 0,
DATAPROC_F_JSON,
};
enum nodetype {
DATAPROC_T_NONE = 0,
DATAPROC_T_NULL,
DATAPROC_T_BOOLEAN,
DATAPROC_T_INT,
DATAPROC_T_FLOAT,
DATAPROC_T_STRING,
DATAPROC_T_ARRAY,
DATAPROC_T_OBJECT,
DATAPROC_T_MAPPED,
DATAPROC_T_ERR,
};
enum {
DATAPROC_E_NONE = 0,
DATAPROC_E_UNKFORMAT,
DATAPROC_E_FOPEN,
DATAPROC_E_FSIZE,
DATAPROC_E_ALLOC,
DATAPROC_E_BACKEND,
DATAPROC_E_QUERY,
DATAPROC_E_BADTYPE,
DATAPROC_E_REGFULL,
DATAPROC_E_REGNOTFOUND,
};
enum diaglevel {
DIAG_NOTE,
DIAG_WARNING,
DIAG_ERROR,
};
typedef struct diagnostic diagnostic_t;
typedef struct datafile datafile_t;
typedef struct datanode datanode_t;
typedef struct lookup lookup_t;
typedef struct span span_t;
struct datafile {
const char *filename;
const char *source;
size_t size;
diagnostic_t *diag_head;
diagnostic_t *diag_tail;
void *ctx;
void *pool;
};
struct datanode {
datafile_t *file;
char *path;
enum nodetype type;
union {
void *node;
long mapped;
};
};
struct lookup {
long val;
const char *def;
};
int dp_init(enum format format);
int dp_register(lookup_t *table, size_t size, const char *type);
int dp_load(datafile_t *df, const char *filename);
void dp_free(datafile_t *df);
enum diaglevel dp_report(datafile_t *df);
void dp_error(datanode_t *dn, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void dp_warn(datanode_t *dn, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void dp_note(datanode_t *dn, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
datanode_t dp_try(datafile_t *df, const char *path);
datanode_t dp_get(datafile_t *df, const char *path);
bool dp_bool(datanode_t dn);
long dp_int(datanode_t dn);
int8_t dp_s8(datanode_t dn);
int16_t dp_s16(datanode_t dn);
int32_t dp_s32(datanode_t dn);
int64_t dp_s64(datanode_t dn);
uint8_t dp_u8(datanode_t dn);
uint8_t dp_u8range(datanode_t dn, uint8_t min, uint8_t max);
uint16_t dp_u16(datanode_t dn);
uint16_t dp_u16range(datanode_t dn, uint16_t min, uint16_t max);
uint32_t dp_u32(datanode_t dn);
uint32_t dp_u32range(datanode_t dn, uint32_t min, uint32_t max);
uint64_t dp_u64(datanode_t dn);
double dp_float(datanode_t dn);
const char* dp_string(datanode_t dn);
size_t dp_arrlen(datanode_t dn);
datanode_t dp_arrelem(datanode_t dn, size_t i);
bool dp_hasmemb(datanode_t dn, const char *k);
datanode_t dp_objmemb(datanode_t dn, const char *k);
datanode_t dp_lookup(datanode_t dn, const char *type);
datanode_t dp_lookup_s(datanode_t dn, const char *type);
#endif // DATAPROC_H