Libecoli  0.11.3
Extensible COmmand LIne library
node_expr.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
3  */
4 
13 #pragma once
14 
15 #include <ecoli/node.h>
16 
32 typedef int (*ec_node_expr_eval_var_t)(void **result, void *userctx, const struct ec_pnode *var);
33 
52  void **result,
53  void *userctx,
54  void *operand,
55  const struct ec_pnode *operator
56 );
57 
64  void **result,
65  void *userctx,
66  void *operand,
67  const struct ec_pnode *operator
68 );
69 
89  void **result,
90  void *userctx,
91  void *operand1,
92  const struct ec_pnode *operator,
93  void * operand2
94 );
95 
115  void **result,
116  void *userctx,
117  const struct ec_pnode *open_paren,
118  const struct ec_pnode *close_paren,
119  void *value
120 );
121 
130 typedef void (*ec_node_expr_eval_free_t)(void *result, void *userctx);
131 
140 struct ec_node *ec_node_expr(const char *id);
141 
153 int ec_node_expr_set_val_node(struct ec_node *gen_node, struct ec_node *val_node);
154 
166 int ec_node_expr_add_bin_op(struct ec_node *gen_node, struct ec_node *op);
167 
179 int ec_node_expr_add_pre_op(struct ec_node *gen_node, struct ec_node *op);
180 
192 int ec_node_expr_add_post_op(struct ec_node *gen_node, struct ec_node *op);
193 
209  struct ec_node *gen_node,
210  struct ec_node *open,
211  struct ec_node *close
212 );
213 
218  ec_node_expr_eval_var_t eval_var;
219  ec_node_expr_eval_pre_op_t eval_pre_op;
220  ec_node_expr_eval_post_op_t eval_post_op;
221  ec_node_expr_eval_bin_op_t eval_bin_op;
222  ec_node_expr_eval_parenthesis_t eval_parenthesis;
223  ec_node_expr_eval_free_t eval_free;
224 };
225 
243  void **result,
244  const struct ec_node *node,
245  struct ec_pnode *parse,
246  const struct ec_node_expr_eval_ops *ops,
247  void *userctx
248 );
249 
int ec_node_expr_add_post_op(struct ec_node *gen_node, struct ec_node *op)
int ec_node_expr_eval(void **result, const struct ec_node *node, struct ec_pnode *parse, const struct ec_node_expr_eval_ops *ops, void *userctx)
int ec_node_expr_add_bin_op(struct ec_node *gen_node, struct ec_node *op)
int(* ec_node_expr_eval_pre_op_t)(void **result, void *userctx, void *operand, const struct ec_pnode *operator)
Definition: node_expr.h:51
int(* ec_node_expr_eval_bin_op_t)(void **result, void *userctx, void *operand1, const struct ec_pnode *operator, void *operand2)
Definition: node_expr.h:88
struct ec_node * ec_node_expr(const char *id)
void(* ec_node_expr_eval_free_t)(void *result, void *userctx)
Definition: node_expr.h:130
int ec_node_expr_add_pre_op(struct ec_node *gen_node, struct ec_node *op)
int ec_node_expr_add_parenthesis(struct ec_node *gen_node, struct ec_node *open, struct ec_node *close)
int(* ec_node_expr_eval_var_t)(void **result, void *userctx, const struct ec_pnode *var)
Definition: node_expr.h:32
int(* ec_node_expr_eval_post_op_t)(void **result, void *userctx, void *operand, const struct ec_pnode *operator)
Definition: node_expr.h:63
int ec_node_expr_set_val_node(struct ec_node *gen_node, struct ec_node *val_node)
int(* ec_node_expr_eval_parenthesis_t)(void **result, void *userctx, const struct ec_pnode *open_paren, const struct ec_pnode *close_paren, void *value)
Definition: node_expr.h:114
struct ec_node * ec_node(const char *typename, const char *id)
struct ec_pnode * ec_pnode(const struct ec_node *node)