00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _H_c_api
00024 #define _H_c_api
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041 #include <stdio.h>
00042
00043
00048 typedef void *boolexpr_t;
00049
00051 enum bool_operator_t
00052 {
00053 BOOLSTUFF_VALUE,
00054 BOOLSTUFF_AND,
00055 BOOLSTUFF_OR,
00056 BOOLSTUFF_NOT
00057 };
00058
00060 enum bool_error_t
00061 {
00062 BOOLSTUFF_OK,
00063 BOOLSTUFF_ERR_GARBAGE_AT_END,
00064 BOOLSTUFF_ERR_RUNAWAY_PARENTHESIS,
00065 BOOLSTUFF_ERR_IDENTIFIER_EXPECTED
00066 };
00067
00068
00075 boolexpr_t boolstuff_create_value_node(const char *value);
00076
00086 boolexpr_t boolstuff_create_operator_node(
00087 enum bool_operator_t op,
00088 boolexpr_t left,
00089 boolexpr_t right);
00090
00102 boolexpr_t boolstuff_parse(
00103 const char *expr,
00104 size_t *error_index,
00105 enum bool_error_t *error_code);
00106
00111 void boolstuff_destroy_tree(boolexpr_t root);
00112
00118 enum bool_operator_t boolstuff_get_node_type(boolexpr_t node);
00119
00126 const char *boolstuff_get_node_value(boolexpr_t node);
00127
00135 boolexpr_t boolstuff_get_left_subtree(boolexpr_t node);
00136
00143 boolexpr_t boolstuff_get_right_subtree(boolexpr_t node);
00144
00150 void boolstuff_set_node_type(boolexpr_t node, enum bool_operator_t op);
00151
00157 void boolstuff_set_left_subtree(boolexpr_t node, boolexpr_t subtree);
00158
00164 void boolstuff_set_right_subtree(boolexpr_t node, boolexpr_t subtree);
00165
00172 void boolstuff_set_node_value(boolexpr_t node, const char *value);
00173
00179 void boolstuff_print_tree(FILE *out, boolexpr_t root);
00180
00181
00182
00183
00184
00185
00186 char *boolstuff_print_tree_to_string(boolexpr_t root);
00187
00192 void boolstuff_free_string(char *s);
00193
00199 boolexpr_t boolstuff_clone_tree(boolexpr_t root);
00200
00206 boolexpr_t boolstuff_get_disjunctive_normal_form(boolexpr_t root);
00207
00213 int boolstuff_is_disjunctive_normal_form(boolexpr_t root);
00214
00231 boolexpr_t *boolstuff_get_dnf_term_roots(boolexpr_t root, size_t *num);
00232
00237 void boolstuff_free_node_array(boolexpr_t *array);
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256 void boolstuff_get_tree_variables(boolexpr_t tree,
00257 char ***positivesArray,
00258 char ***negativesArray);
00259
00265 void boolstuff_free_variables_sets(
00266 char **positivesArray,
00267 char **negativesArray);
00268
00269
00270 #ifdef __cplusplus
00271 }
00272 #endif
00273
00274 #endif