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_TRANS_BDD_BDD_TRANS_H__
00040 #define __NUSMV_CORE_TRANS_BDD_BDD_TRANS_H__
00041
00042 #include "nusmv/core/trans/generic/GenericTrans.h"
00043
00044 #include "nusmv/core/trans/bdd/ClusterList.h"
00045 #include "nusmv/core/trans/bdd/ClusterOptions.h"
00046
00047 #include "nusmv/core/dd/dd.h"
00048
00049
00050
00051
00052
00059 typedef struct BddTrans_TAG* BddTrans_ptr;
00060
00066 #define BDD_TRANS(x) \
00067 ((BddTrans_ptr) x)
00068
00074 #define BDD_TRANS_CHECK_INSTANCE(x) \
00075 (nusmv_assert(BDD_TRANS(x) != BDD_TRANS(NULL)))
00076
00077
00091 typedef enum TransImageKind_TAG {
00092 TRANS_IMAGE_FORWARD_STATE = 0,
00093 TRANS_IMAGE_FORWARD_STATE_INPUT = 1,
00094 TRANS_IMAGE_BACKWARD_STATE = 2,
00095 TRANS_IMAGE_BACKWARD_STATE_INPUT = 3
00096 } TransImageKind;
00097
00098
00099
00100
00101
00102
00103
00110 #define TRANS_IMAGE_IS_FORWARD(kind) (!((kind) >> 1))
00111
00119 #define TRANS_IMAGE_IS_STATE_ONLY(kind) (!((kind) & 1))
00120
00121
00122
00123 #if 0
00124 # define TRANS_DEBUG_THRESHOLD
00125 #endif
00126
00127
00128
00129
00130
00131
00144 BddTrans_ptr
00145 BddTrans_create(DDMgr_ptr dd_manager,
00146 const ClusterList_ptr clusters_bdd,
00147 bdd_ptr state_vars_cube,
00148 bdd_ptr input_vars_cube,
00149 bdd_ptr next_state_vars_cube,
00150 const TransType trans_type,
00151 const ClusterOptions_ptr cl_options);
00152
00165 BddTrans_ptr
00166 BddTrans_generic_create(
00167 const NuSMVEnv_ptr env,
00168 const TransType trans_type,
00169 void* transition,
00170 void* (*copy)(void* tranistion),
00171 void (*destroy)(void* tranistion),
00172 bdd_ptr (*compute_image)(void* tranistion,
00173 bdd_ptr bdd, TransImageKind kind),
00174 bdd_ptr (*compute_k_image)(void* tranistion,
00175 bdd_ptr bdd, int k,
00176 TransImageKind kind),
00177 bdd_ptr (*get_monolithic_bdd)(void* tranistion),
00178 void (*synchronous_product)(void* tranistion1,
00179 void* const transition2),
00180 void (*print_short_info)(void* tranistion, FILE* file),
00181 ClusterList_ptr (*trans_get_clusterlist)(void* transition));
00182
00192 void
00193 BddTrans_apply_synchronous_product(BddTrans_ptr self,
00194 const BddTrans_ptr other);
00195
00208 bdd_ptr
00209 BddTrans_get_monolithic_bdd(const BddTrans_ptr self);
00210
00218 ClusterList_ptr
00219 BddTrans_get_clusterlist(const BddTrans_ptr self);
00220
00230 bdd_ptr
00231 BddTrans_get_forward_image_state(const BddTrans_ptr self, bdd_ptr s);
00232
00240 bdd_ptr
00241 BddTrans_get_forward_image_state_input(const BddTrans_ptr self,
00242 bdd_ptr s);
00243
00251 bdd_ptr
00252 BddTrans_get_backward_image_state(const BddTrans_ptr self, bdd_ptr s);
00253
00261 bdd_ptr
00262 BddTrans_get_backward_image_state_input(const BddTrans_ptr self,
00263 bdd_ptr s);
00264
00274 bdd_ptr
00275 BddTrans_get_k_forward_image_state(const BddTrans_ptr self,
00276 bdd_ptr s, int k);
00277
00285 bdd_ptr
00286 BddTrans_get_k_forward_image_state_input(const BddTrans_ptr self,
00287 bdd_ptr s, int k);
00288
00296 bdd_ptr
00297 BddTrans_get_k_backward_image_state(const BddTrans_ptr self,
00298 bdd_ptr s, int k);
00299
00307 bdd_ptr
00308 BddTrans_get_k_backward_image_state_input(const BddTrans_ptr self,
00309 bdd_ptr s, int k);
00310
00318 void BddTrans_print_short_info(const BddTrans_ptr self,
00319 FILE* file);
00320
00321
00322
00323 #endif