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_COMPILE_DEPENDENCY_DEPENDENCY_BASE_PRIVATE_H__
00040 #define __NUSMV_CORE_COMPILE_DEPENDENCY_DEPENDENCY_BASE_PRIVATE_H__
00041
00042
00043 #include "nusmv/core/compile/dependency/DependencyBase.h"
00044 #include "nusmv/core/node/NodeWalker.h"
00045 #include "nusmv/core/node/NodeWalker_private.h"
00046 #include "nusmv/core/utils/utils.h"
00047 #include "nusmv/core/utils/defs.h"
00048
00049
00059 typedef struct DependencyBase_TAG
00060 {
00061
00062 INHERITS_FROM(NodeWalker);
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 Set_t (*get_dependencies) (DependencyBase_ptr self,
00073 SymbTable_ptr symb_table,
00074 node_ptr formula, node_ptr context,
00075 SymbFilterType filter,
00076 boolean preserve_time, int time,
00077 hash_ptr dependencies_hash);
00078 } DependencyBase;
00079
00080
00088 #define _THROW(symb_table, formula, context, filter, preserve_time, time, dependency_hash) \
00089 dependency_base_throw_get_dependencies(DEPENDENCY_BASE(self), \
00090 symb_table, \
00091 formula, context, filter, \
00092 preserve_time, \
00093 time, dependency_hash)
00094
00101 #define _INSERT_IN_HASH(dependencies_hash, key, result, is_to_be_inserted) \
00102 if (is_to_be_inserted) { \
00103 \
00104 nusmv_assert((Set_t) NULL == \
00105 formula_dependency_lookup_hash(dependencies_hash, \
00106 NODE_PTR(&key))); \
00107 if (Set_IsEmpty(result)) { \
00108 formula_dependency_insert_hash(dependencies_hash, NODE_PTR(&key), \
00109 EMPTY_DEP_SET); \
00110 } \
00111 else formula_dependency_insert_hash(dependencies_hash, NODE_PTR(&key), \
00112 result); \
00113 } \
00114
00115
00116
00117
00118
00133 DependencyBase_ptr
00134 DependencyBase_create(const NuSMVEnv_ptr env, const char* name, int low, size_t num);
00135
00144 void dependency_base_init(DependencyBase_ptr self,
00145 const NuSMVEnv_ptr env,
00146 const char* name, int low, size_t num,
00147 boolean can_handle_null);
00148
00155 void dependency_base_deinit(DependencyBase_ptr self);
00156
00164 Set_t
00165 dependency_base_throw_get_dependencies(DependencyBase_ptr self,
00166 SymbTable_ptr symb_table,
00167 node_ptr formula, node_ptr context,
00168 SymbFilterType filter,
00169 boolean preserve_time, int time,
00170 hash_ptr dependencies_hash);
00171
00172
00173 #endif