00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00039 #ifndef __NUSMV_CORE_NODE_NODE_MGR_H__
00040 #define __NUSMV_CORE_NODE_NODE_MGR_H__
00041
00042 #include "nusmv/core/cinit/NuSMVEnv.h"
00043
00044
00045
00046
00047
00053 #define Nil ((node_ptr)0)
00054
00060 #define FAILURE_NODE ((node_ptr)(-1))
00061
00067 #define CLOSED_NODE (node_ptr)(-2)
00068
00069
00070
00071
00072 typedef union value_ node_val;
00073
00080 typedef struct node node_rec;
00081 typedef struct node * node_ptr;
00082
00088 typedef node_ptr (*NPFN)(node_ptr);
00089 typedef node_ptr (*NPFNN)(node_ptr, node_ptr);
00090
00096 typedef void (*VPFN)(node_ptr);
00097
00103 typedef boolean (*BPFN)(node_ptr);
00104
00110 typedef int (*custom_print_sexp_t)(FILE *, node_ptr);
00111 typedef int (*out_func_t)(void*, char*);
00112 typedef int (*custom_print_node_t)(out_func_t, FILE *, node_ptr,
00113 int *, char **, int *, int *, int *);
00114
00115
00116
00117
00118
00130 union value_ {
00131 int inttype;
00132 struct node *nodetype;
00133 struct string_ * strtype;
00134 void * bddtype;
00135 };
00136
00137
00155 struct node {
00156 struct node *link;
00157
00158
00159 short int type;
00160 int lineno;
00161 node_val left;
00162 node_val right;
00163 void* extra_data;
00164 };
00165
00172 typedef struct NodeMgr_TAG* NodeMgr_ptr;
00173
00174
00175
00176
00177
00178
00185 #define NODE_MGR(self) \
00186 ((NodeMgr_ptr) self)
00187
00193 #define NODE_MGR_CHECK_INSTANCE(self) \
00194 (nusmv_assert(NODE_MGR(self) != NODE_MGR(NULL)))
00195
00196
00197
00198
00199
00205 #define find_node(mgr, t, l, r) \
00206 NodeMgr_find_node(mgr, t, l, r)
00207
00213 #define new_node(mgr, t, l, r) \
00214 NodeMgr_new_node(mgr, t, l, r)
00215
00221 #define new_lined_node(mgr, t, l, r, lineno) \
00222 NodeMgr_new_lined_node(mgr, t, l, r, lineno)
00223
00229 #define free_node(mgr, n) \
00230 NodeMgr_free_node(mgr, n)
00231
00237 #define find_atom(mgr, n) \
00238 NodeMgr_find_atom(mgr, n)
00239
00240
00241
00247 #define cons(mgr, x, y) \
00248 NodeMgr_cons(mgr, x, y)
00249
00260
00261
00267 #define NODEMGR_ASSERT_IS_NODE_NORMALIZED(nodemgr, node) \
00268 (nusmv_assert(node == find_atom(nodemgr, node)))
00269
00272
00273
00274
00275
00287 NodeMgr_ptr NodeMgr_create(const NuSMVEnv_ptr env);
00288
00297 void NodeMgr_destroy(NodeMgr_ptr self);
00298
00307 void NodeMgr_show_profile_stats(NodeMgr_ptr self,
00308 FILE* stream);
00309
00310
00311
00324 node_ptr NodeMgr_new_node(NodeMgr_ptr self, int type,
00325 node_ptr left, node_ptr right);
00326
00341 node_ptr NodeMgr_new_lined_node(NodeMgr_ptr self,
00342 int type,
00343 node_ptr left,
00344 node_ptr right,
00345 int lineno);
00346
00347
00348
00358 void NodeMgr_free_node(NodeMgr_ptr self, node_ptr node);
00359
00372 node_ptr NodeMgr_find_node(NodeMgr_ptr self, int type,
00373 node_ptr x, node_ptr y);
00374
00387 node_ptr NodeMgr_find_atom(NodeMgr_ptr self,
00388 node_ptr node);
00389
00402 node_ptr NodeMgr_cons(NodeMgr_ptr self, node_ptr x, node_ptr y);
00403
00404
00405
00412 void NodeMgr_self_check(NodeMgr_ptr self, boolean check_repeated);
00413
00418 #endif