00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024 #ifndef _SEXP_DATATYPE
00025 #define _SEXP_DATATYPE
00026
00027 #include "public/sexp-datatype.h"
00028 #include "generic/rbt/rbt.h"
00029 #include "../../../common/util.h"
00030
00031 OSCAP_HIDDEN_START;
00032
00033 struct SEXP_datatype {
00034 uint16_t dt_flg;
00035 uint8_t _dt[];
00036 };
00037
00038 #define SEXP_DTFLG_LOCALDATA 0x01
00039 #define SEXP_DTFLG_HAVEDTOPS 0x02
00040
00041 struct SEXP_datatype_ops {
00042 uint16_t dt_opcnt;
00043 SEXP_datatypeOP_t *dt_op;
00044 };
00045
00046 struct SEXP_datatypeTbl {
00047 rbt_t *tree;
00048 };
00049
00050
00051
00052
00053 typedef struct rbt_str_node SEXP_datatypePtr_t;
00054
00055
00056
00057
00058 struct SEXP_datatype_extptr {
00059 struct rbt_str_node *n;
00060 void *l;
00061 };
00062
00063 typedef struct SEXP_datatype_extptr SEXP_datatypeExtptr_t;
00064
00065
00066 const char *SEXP_datatype_name(SEXP_datatypePtr_t *p);
00067
00068 void SEXP_datatype_once(void);
00069 void SEXP_datatypeGlobalTbl_init(void);
00070 void SEXP_datatypeGlobalTbl_free(void);
00071
00072 SEXP_datatypeTbl_t *SEXP_datatypeTbl_new (void);
00073 int SEXP_datatypeTbl_init(SEXP_datatypeTbl_t *t);
00074 void SEXP_datatypeTbl_free(SEXP_datatypeTbl_t *t);
00075
00076 SEXP_datatypePtr_t *SEXP_datatype_get(SEXP_datatypeTbl_t *t, const char *name);
00077 SEXP_datatypePtr_t *SEXP_datatype_add(SEXP_datatypeTbl_t *t, char *name, SEXP_datatype_t *d, void *l);
00078 int SEXP_datatype_del(SEXP_datatypeTbl_t *t, const char *name);
00079
00080 #define SEXP_OP_CONTINUE 0
00081 #define SEXP_OP_ABORT 1
00082 #define SEXP_OP_RETURN 2
00083
00084 OSCAP_HIDDEN_END;
00085
00086 #endif