123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #ifndef __EXPRESSION_H_
- #define __EXPRESSION_H_
- struct expr_list;
- typedef int func_t(int argc, const int *argt, void **args);
- typedef int args_t(int argc, int *argt);
- #define E_ARG_LO 1
- #define E_ARG_HI 2
- #define E_ARG_TYPE 3
- #define E_RES_TYPE 4
- #define E_INV_TYPE 5
- #define E_ARG_NUM 6
- #define E_WTF 99
- typedef enum expr_t
- {
- expr_type_constant,
- expr_type_variable,
- expr_type_map,
- expr_type_function,
- expr_type_binding
- } expr_t;
- typedef union expr_data_const
- {
- int ival;
- double fval;
- } expr_data_const;
- typedef struct expr_data_var
- {
- const char *name;
- struct expression *bind;
- } expr_data_var;
- typedef struct expr_data_map
- {
- const char *name;
- int mod;
- int row, col, depth;
- int idx;
- } expr_data_map;
- typedef struct expr_data_func
- {
- const char *name;
- const char *oper;
- int prec;
- func_t *func;
- int argc;
- struct expression **args;
- int *argt;
- void **argv;
- } expr_data_func;
- typedef struct expr_data_bind
- {
- const char *var;
- struct expression *val;
- int fd;
- } expr_data_bind;
- typedef struct expression
- {
- int type;
- int res_type;
- void *buf;
- union
- {
- expr_data_const con;
- expr_data_var var;
- expr_data_map map;
- expr_data_func func;
- expr_data_bind bind;
- } data;
- void *worker;
- } expression;
- typedef struct expr_list
- {
- expression *exp;
- struct expr_list *next;
- } expr_list;
- typedef struct func_desc
- {
- const char *name;
- args_t *check_args;
- func_t *func;
- } func_desc;
- extern int list_length(expr_list * l);
- extern void define_variable(expression * e);
- extern char *composite(const char *name, const char *mapset);
- extern expr_list *list(expression * exp, expr_list * next);
- extern expr_list *singleton(expression * e1);
- extern expr_list *pair(expression * e1, expression * e2);
- extern expr_list *triple(expression * e1, expression * e2, expression * e3);
- extern expression *constant_int(int x);
- extern expression *constant_float(float x);
- extern expression *constant_double(double x);
- extern expression *variable(const char *name);
- extern expression *mapname(const char *name, int mod, int row, int col,
- int depth);
- extern expression *operator(const char *name, const char *oper, int prec,
- expr_list * args);
- extern expression *function(const char *name, expr_list * args);
- extern expression *binding(const char *var, expression * val);
- extern func_desc func_descs[];
- #define IS_NULL_C(x) (Rast_is_c_null_value((x)))
- #define IS_NULL_F(x) (Rast_is_f_null_value((x)))
- #define IS_NULL_D(x) (Rast_is_d_null_value((x)))
- #define SET_NULL_C(x) (Rast_set_c_null_value((x),1))
- #define SET_NULL_F(x) (Rast_set_f_null_value((x),1))
- #define SET_NULL_D(x) (Rast_set_d_null_value((x),1))
- #endif /* __EXPRESSION_H_ */
|