expression.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #ifndef __EXPRESSION_H_
  2. #define __EXPRESSION_H_
  3. #include <grass/calc.h>
  4. struct expr_list;
  5. typedef enum expr_t
  6. {
  7. expr_type_constant,
  8. expr_type_variable,
  9. expr_type_map,
  10. expr_type_function,
  11. expr_type_binding
  12. } expr_t;
  13. typedef union expr_data_const
  14. {
  15. int ival;
  16. double fval;
  17. } expr_data_const;
  18. typedef struct expr_data_var
  19. {
  20. const char *name;
  21. struct expression *bind;
  22. } expr_data_var;
  23. typedef struct expr_data_map
  24. {
  25. const char *name;
  26. int mod;
  27. int row, col, depth;
  28. int idx;
  29. } expr_data_map;
  30. typedef struct expr_data_func
  31. {
  32. const char *name;
  33. const char *oper;
  34. int prec;
  35. func_t *func;
  36. int argc;
  37. struct expression **args;
  38. int *argt;
  39. void **argv;
  40. } expr_data_func;
  41. typedef struct expr_data_bind
  42. {
  43. const char *var;
  44. struct expression *val;
  45. int fd;
  46. } expr_data_bind;
  47. typedef struct expression
  48. {
  49. int type;
  50. int res_type;
  51. void *buf;
  52. union
  53. {
  54. expr_data_const con;
  55. expr_data_var var;
  56. expr_data_map map;
  57. expr_data_func func;
  58. expr_data_bind bind;
  59. } data;
  60. void *worker;
  61. } expression;
  62. typedef struct expr_list
  63. {
  64. expression *exp;
  65. struct expr_list *next;
  66. } expr_list;
  67. extern int list_length(expr_list * l);
  68. extern void define_variable(expression * e);
  69. extern char *composite(const char *name, const char *mapset);
  70. extern expr_list *list(expression * exp, expr_list * next);
  71. extern expr_list *singleton(expression * e1);
  72. extern expr_list *pair(expression * e1, expression * e2);
  73. extern expr_list *triple(expression * e1, expression * e2, expression * e3);
  74. extern expression *constant_int(int x);
  75. extern expression *constant_float(float x);
  76. extern expression *constant_double(double x);
  77. extern expression *variable(const char *name);
  78. extern expression *mapname(const char *name, int mod, int row, int col,
  79. int depth);
  80. extern expression *operator(const char *name, const char *oper, int prec,
  81. expr_list * args);
  82. extern expression *function(const char *name, expr_list * args);
  83. extern expression *binding(const char *var, expression * val);
  84. extern func_desc local_func_descs[];
  85. #endif /* __EXPRESSION_H_ */