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
00029
00040 #ifndef __NUSMV_CORE_NODE_NODE_H__
00041 #define __NUSMV_CORE_NODE_NODE_H__
00042
00043 #include <stdio.h>
00044
00045 #include "cudd/util.h"
00046 #include "nusmv/core/node/NodeMgr.h"
00047 #include "nusmv/core/cinit/NuSMVEnv.h"
00048
00049
00050
00051
00052
00058 #define NODE_PTR(x) \
00059 ((node_ptr) (x))
00060
00068 #define NODE_CONS_LIST_FOREACH(list, iter) \
00069 for (iter = list; \
00070 Nil != iter; \
00071 iter = cdr(iter))
00072
00082 #define Node_conslist_get(iter) \
00083 car(iter)
00084
00090 #define NODE_TO_INT(x) \
00091 (PTR_TO_INT(x))
00092
00099 #if NUSMV_SIZEOF_VOID_P == 8 && NUSMV_SIZEOF_INT == 4
00100 #if NUSMV_SIZEOF_LONG == 8
00101
00107 #define NODE_FROM_INT(x) \
00108 (PTR_FROM_INT(node_ptr, (0x00000000FFFFFFFFL & ((nusmv_ptrint)x))))
00109 #else
00110
00111 #define NODE_FROM_INT(x) \
00112 (PTR_FROM_INT(node_ptr, (0x00000000FFFFFFFFLL & ((nusmv_ptrint)x))))
00113 #endif
00114 #else
00115 #define NODE_FROM_INT(x) \
00116 (PTR_FROM_INT(node_ptr, (x)))
00117 #endif
00118
00124 #define caar(_n_) car(car(_n_))
00125
00131 #define cadr(_n_) car(cdr(_n_))
00132
00138 #define cdar(_n_) cdr(car(_n_))
00139
00145 #define cddr(_n_) cdr(cdr(_n_))
00146
00152 #define node_get_type(_n_) (_n_)->type
00153
00159 #define node_get_lineno(_n_) (_n_)->lineno
00160
00166 #define node_get_lstring(_n_) (_n_)->left.strtype
00167
00173 #define node_get_int(_n_) (_n_)->left.inttype
00174
00180 #define node_bdd_setcar(_n_,_b_) \
00181 { (_n_)->left.bddtype = (_b_); }
00182
00188 #define node_bdd_setcdr(_n_,_b_) \
00189 { (_n_)->right.bddtype = (_b_); }
00190
00196 #define node_node_setcar(_n_,_b_)\
00197 { (_n_)->left.nodetype = (_b_); }
00198
00204 #define node_node_setcdr(_n_,_b_)\
00205 { (_n_)->right.nodetype = (_b_); }
00206
00212 #define node_int_setcar(_n_,_b_) \
00213 { (_n_)->left.inttype = (_b_); }
00214
00220 #define node_int_setcdr(_n_,_b_) \
00221 { (_n_)->right.inttype = (_b_); }
00222
00228 #define node_str_setcar(_n_,_b_) \
00229 { (_n_)->left.strtype = (_b_); }
00230
00236 #define node_str_setcdr(_n_,_b_) \
00237 { (_n_)->right.strtype = (_b_); }
00238
00239
00240
00241
00242
00243
00252 void node_pkg_init(NuSMVEnv_ptr env);
00253
00262 void node_pkg_quit(NuSMVEnv_ptr env);
00263
00271 void swap_nodes(node_ptr *, node_ptr *);
00272
00278 int node_is_failure(node_ptr node);
00279
00285 int node_is_leaf(node_ptr node);
00286
00292 boolean Node_is_symbol(node_ptr const node);
00293
00299 boolean Node_is_relation(node_ptr const expr);
00300
00307 boolean Node_is_temporal_op(node_ptr const node);
00308
00318 node_ptr car(node_ptr);
00319
00329 node_ptr cdr(node_ptr);
00330
00338 void print_array_type(const NuSMVEnv_ptr env, FILE* output_stream, const node_ptr body);
00339
00349 void setcar(node_ptr, node_ptr);
00350
00360 void setcdr(node_ptr, node_ptr);
00361
00371 void node_set_type(node_ptr, int);
00372
00373
00374
00381 node_ptr Node_find_boolean_type(NodeMgr_ptr nodemgr);
00382
00389 node_ptr Node_find_integer_type(NodeMgr_ptr nodemgr);
00390
00397 node_ptr Node_find_real_type(NodeMgr_ptr nodemgr);
00398
00404 node_ptr Node_find_error_type(NodeMgr_ptr nodemgr);
00405
00406
00407
00408
00409
00410
00411
00412
00421 node_ptr new_list(void);
00422
00431 node_ptr copy_list(NodeMgr_ptr nodemgr, node_ptr l);
00432
00443 void free_list(NodeMgr_ptr nodemgr, node_ptr l);
00444
00445
00446
00447
00456 unsigned int llength(node_ptr);
00457
00458
00459
00460
00469 int is_list_empty(node_ptr);
00470
00481 int in_list(node_ptr, node_ptr);
00482
00490 boolean Node_is_conslist(node_ptr list);
00491
00492
00493
00494
00505 void walk(VPFN fun, node_ptr);
00506
00515 node_ptr Node_conslist_add(NodeMgr_ptr nodemgr,
00516 node_ptr list,
00517 node_ptr element);
00518
00524 node_ptr Node_conslist_remove(NodeMgr_ptr nodemgr,
00525 node_ptr list,
00526 node_ptr element);
00527
00537 node_ptr append(node_ptr, node_ptr);
00538
00548 node_ptr append_ns(NodeMgr_ptr nodemgr, node_ptr, node_ptr);
00549
00561 node_ptr reverse(node_ptr);
00562
00572 node_ptr reverse_ns(NodeMgr_ptr nodemgr, node_ptr);
00573
00584 node_ptr last(node_ptr);
00585
00598 node_ptr map(NodeMgr_ptr nodemgr, NPFN fun, node_ptr);
00599
00612 node_ptr map_param(NodeMgr_ptr nodemgr,
00613 node_ptr (*fun)(node_ptr, void*),
00614 node_ptr l, void*);
00615
00629 node_ptr map2(NodeMgr_ptr nodemgr,
00630 NPFNN fun, node_ptr, node_ptr);
00631
00642 node_ptr even_elements(NodeMgr_ptr nodemgr, node_ptr);
00643
00654 node_ptr odd_elements(NodeMgr_ptr nodemgr, node_ptr);
00655
00667 node_ptr node_subtract(NodeMgr_ptr nodemgr, node_ptr, node_ptr);
00668
00669
00670
00671 #endif