Libecoli 0.10.1
Extensible COmmand LIne library
Loading...
Searching...
No Matches
node_expr.h
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
3 */
4
9
10#pragma once
11
12#include <ecoli/node.h>
13
29typedef 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
55typedef 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
62typedef 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
70typedef 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
78typedef void (*ec_node_expr_eval_free_t)(void *result, void *userctx);
79
80struct ec_node *ec_node_expr(const char *id);
81int ec_node_expr_set_val_node(struct ec_node *gen_node, struct ec_node *val_node);
82int ec_node_expr_add_bin_op(struct ec_node *gen_node, struct ec_node *op);
83int ec_node_expr_add_pre_op(struct ec_node *gen_node, struct ec_node *op);
84int ec_node_expr_add_post_op(struct ec_node *gen_node, struct ec_node *op);
85int ec_node_expr_add_parenthesis(
86 struct ec_node *gen_node,
87 struct ec_node *open,
88 struct ec_node *close
89);
90
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
100int 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
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)
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_pnode * ec_pnode(const struct ec_node *node)