Libecoli 0.5.0
Extensible COmmand LIne library
Loading...
Searching...
No Matches
ecoli_node_expr.h
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
3 */
4
9
10#ifndef ECOLI_NODE_EXPR_
11#define ECOLI_NODE_EXPR_
12
13#include <ecoli_node.h>
14
31 void **result, void *userctx,
32 const struct ec_pnode *var);
33
52 void **result, void *userctx,
53 void *operand,
54 const struct ec_pnode *operator);
55
56typedef int (*ec_node_expr_eval_post_op_t)(
57 void **result, void *userctx,
58 void *operand,
59 const struct ec_pnode *operator);
60
61typedef int (*ec_node_expr_eval_bin_op_t)(
62 void **result, void *userctx,
63 void *operand1,
64 const struct ec_pnode *operator,
65 void *operand2);
66
67typedef int (*ec_node_expr_eval_parenthesis_t)(
68 void **result, void *userctx,
69 const struct ec_pnode *open_paren,
70 const struct ec_pnode *close_paren,
71 void * value);
72
73typedef void (*ec_node_expr_eval_free_t)(
74 void *result, void *userctx);
75
76
77struct ec_node *ec_node_expr(const char *id);
78int ec_node_expr_set_val_node(struct ec_node *gen_node, struct ec_node *val_node);
79int ec_node_expr_add_bin_op(struct ec_node *gen_node, struct ec_node *op);
80int ec_node_expr_add_pre_op(struct ec_node *gen_node, struct ec_node *op);
81int ec_node_expr_add_post_op(struct ec_node *gen_node, struct ec_node *op);
82int ec_node_expr_add_parenthesis(struct ec_node *gen_node,
83 struct ec_node *open, struct ec_node *close);
84
88 ec_node_expr_eval_post_op_t eval_post_op;
89 ec_node_expr_eval_bin_op_t eval_bin_op;
90 ec_node_expr_eval_parenthesis_t eval_parenthesis;
91 ec_node_expr_eval_free_t eval_free;
92};
93
94int ec_node_expr_eval(void **result, const struct ec_node *node,
95 struct ec_pnode *parse, const struct ec_node_expr_eval_ops *ops,
96 void *userctx);
97
98#endif
99
struct ec_node * ec_node(const char *typename, const char *id)
int(* ec_node_expr_eval_pre_op_t)(void **result, void *userctx, void *operand, const struct ec_pnode *operator)
int(* ec_node_expr_eval_var_t)(void **result, void *userctx, const struct ec_pnode *var)
struct ec_pnode * ec_pnode(const struct ec_node *node)