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_HRC_HRC_FLATTENER_H__
00041 #define __NUSMV_CORE_HRC_HRC_FLATTENER_H__
00042
00043
00044 #include "nusmv/core/utils/utils.h"
00045 #include "nusmv/core/hrc/HrcNode.h"
00046 #include "nusmv/core/compile/symb_table/SymbTable.h"
00047 #include "nusmv/core/compile/FlatHierarchy.h"
00048 #include "nusmv/core/fsm/sexp/SexpFsm.h"
00049 #include "nusmv/core/hrc/hrc.h"
00050
00057 typedef struct HrcFlattener_TAG* HrcFlattener_ptr;
00058
00065 #define HRC_FLATTENER(self) \
00066 ((HrcFlattener_ptr) self)
00067
00073 #define HRC_FLATTENER_CHECK_INSTANCE(self) \
00074 (nusmv_assert(HRC_FLATTENER(self) != HRC_FLATTENER(NULL)))
00075
00076
00077
00080
00081
00082
00083
00097 FlatHierarchy_ptr
00098 HrcToFlatHierarchy(const NuSMVEnv_ptr env,
00099 HrcNode_ptr node,
00100 SymbTable_ptr symb_table,
00101 SymbLayer_ptr layer);
00102
00118 SexpFsm_ptr
00119 HrcToSexpFsm(const NuSMVEnv_ptr env,
00120 HrcNode_ptr node,
00121 SymbTable_ptr symb_table,
00122 SymbLayer_ptr layer);
00123
00139 HrcFlattener_ptr HrcFlattener_create(const NuSMVEnv_ptr env,
00140 HrcNode_ptr node,
00141 SymbTable_ptr symb_table,
00142 SymbLayer_ptr layer);
00143
00157 void HrcFlattener_flatten_hierarchy(HrcFlattener_ptr self);
00158
00167 void HrcFlattener_populate_symbol_table(HrcFlattener_ptr self);
00168
00180 FlatHierarchy_ptr
00181 HrcFlattener_get_flat_hierarchy(HrcFlattener_ptr self);
00182
00194 SymbTable_ptr
00195 HrcFlattener_get_symbol_table(HrcFlattener_ptr self);
00196
00208 SymbLayer_ptr
00209 HrcFlattener_get_symbol_layer(HrcFlattener_ptr self);
00210
00217 void
00218 HrcFlattener_write_flatten_model(HrcFlattener_ptr self,
00219 FILE* out);
00220
00229 void HrcFlattener_destroy(HrcFlattener_ptr self);
00230
00231
00234 #endif