00001 #pragma once 00002 #ifndef _SEXP_DATATYPE 00003 #define _SEXP_DATATYPE 00004 00005 #include "public/sexp-datatype.h" 00006 #include "generic/redblack.h" 00007 00008 typedef struct { 00009 uint8_t arity; 00010 SEXP_datatype_opfn_t fn[3]; 00011 } SEXP_dtype_op_t; 00012 00013 struct SEXP_datatype { 00014 char *name; 00015 uint16_t name_len; 00016 uint16_t op_cnt; 00017 SEXP_dtype_op_t *op; 00018 }; 00019 00020 DEFRBTREE(datatype, SEXP_datatype_t datatype); 00021 00022 struct SEXP_datatypetbl { 00023 TREETYPE(datatype) tree; 00024 }; 00025 00026 SEXP_datatypetbl_t *SEXP_datatypetbl_new (); 00027 int SEXP_datatypetbl_init (SEXP_datatypetbl_t *t); 00028 00029 SEXP_datatype_t *SEXP_datatype_get (SEXP_datatypetbl_t *t, const char *name); 00030 SEXP_datatype_t *SEXP_datatype_add (SEXP_datatypetbl_t *t, SEXP_datatype_t *datatype); 00031 int SEXP_datatype_del (SEXP_datatypetbl_t *t, const char *name); 00032 00033 #endif /* _SEXP_DATATYPE */