Libecoli  0.10.1
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 
10 #pragma once
11 
12 #include <ecoli/node.h>
13 
29 typedef int (*ec_node_expr_eval_var_t)(void **result, void *userctx, const struct ec_pnode *var);
30 
49  void **result,
50  void *userctx,
51  void *operand,
52  const struct ec_pnode *operator
53 );
54 
55 typedef int (*ec_node_expr_eval_post_op_t)(
56  void **result,
57  void *userctx,
58  void *operand,
59  const struct ec_pnode *operator
60 );
61 
62 typedef int (*ec_node_expr_eval_bin_op_t)(
63  void **result,
64  void *userctx,
65  void *operand1,
66  const struct ec_pnode *operator,
67  void * operand2
68 );
69 
70 typedef int (*ec_node_expr_eval_parenthesis_t)(
71  void **result,
72  void *userctx,
73  const struct ec_pnode *open_paren,
74  const struct ec_pnode *close_paren,
75  void *value
76 );
77 
78 typedef void (*ec_node_expr_eval_free_t)(void *result, void *userctx);
79 
80 struct ec_node *ec_node_expr(const char *id);
81 int ec_node_expr_set_val_node(struct ec_node *gen_node, struct ec_node *val_node);
82 int ec_node_expr_add_bin_op(struct ec_node *gen_node, struct ec_node *op);
83 int ec_node_expr_add_pre_op(struct ec_node *gen_node, struct ec_node *op);
84 int ec_node_expr_add_post_op(struct ec_node *gen_node, struct ec_node *op);
85 int ec_node_expr_add_parenthesis(
86  struct ec_node *gen_node,
87  struct ec_node *open,
88  struct ec_node *close
89 );
90 
92  ec_node_expr_eval_var_t eval_var;
93  ec_node_expr_eval_pre_op_t eval_pre_op;
94  ec_node_expr_eval_post_op_t eval_post_op;
95  ec_node_expr_eval_bin_op_t eval_bin_op;
96  ec_node_expr_eval_parenthesis_t eval_parenthesis;
97  ec_node_expr_eval_free_t eval_free;
98 };
99 
100 int ec_node_expr_eval(
101  void **result,
102  const struct ec_node *node,
103  struct ec_pnode *parse,
104  const struct ec_node_expr_eval_ops *ops,
105  void *userctx
106 );
107 
int(* ec_node_expr_eval_pre_op_t)(void **result, void *userctx, void *operand, const struct ec_pnode *operator)
Definition: node_expr.h:48
int(* ec_node_expr_eval_var_t)(void **result, void *userctx, const struct ec_pnode *var)
Definition: node_expr.h:29
struct ec_node * ec_node(const char *typename, const char *id)
struct ec_pnode * ec_pnode(const struct ec_node *node)