00001
00006 #ifndef DIVINE_PROB_EXPLICIT_SYSTEM_HH
00007 #define DIVINE_PROB_EXPLICIT_SYSTEM_HH
00008
00009 #ifndef DOXYGEN_PROCESSING
00010 #include "system/explicit_system.hh"
00011 #include "system/prob_system.hh"
00012
00013 namespace divine {
00014 using std::cerr; using std::endl;
00015 #endif //DOXYGEN_PROCESSING
00016
00017
00018 class prob_succ_container_t;
00019
00022
00036 class prob_explicit_system_t: public virtual explicit_system_t,
00037 public virtual prob_system_t
00038 {
00039
00040 public:
00041
00042
00043
00045
00046 prob_explicit_system_t(error_vector_t & evect):explicit_system_t(evect),
00047 prob_system_t(evect) { }
00048
00050
00059 virtual int get_succs(state_t state, prob_succ_container_t & succs) = 0;
00060
00062
00072 virtual int get_succs(state_t state, prob_succ_container_t & succs, enabled_trans_container_t & etc) = 0;
00073
00074 };
00075
00076
00079 struct prob_and_property_trans_t {
00081 prob_and_property_trans_t():
00082 prob_trans_gid(NO_ID), property_trans_gid(NO_ID) {}\
00084 prob_and_property_trans_t(const size_int_t init_prob_trans_gid,
00085 const size_int_t init_property_trans_gid):
00086 prob_trans_gid(init_prob_trans_gid),
00087 property_trans_gid(init_property_trans_gid) {}
00088 size_int_t prob_trans_gid;
00089 size_int_t property_trans_gid;
00090
00091 bool operator==(const prob_and_property_trans_t & second)
00092 {
00093 return (prob_trans_gid==second.prob_trans_gid &&
00094 property_trans_gid==second.property_trans_gid);
00095 }
00097 bool operator!=(const prob_and_property_trans_t & second)
00098 {
00099 return (prob_trans_gid!=second.prob_trans_gid ||
00100 property_trans_gid!=second.property_trans_gid);
00101 }
00102 };
00103
00105
00108 struct prob_succ_element_t
00109 {
00110 prob_succ_element_t():weight(0), sum(0) { }
00111 prob_succ_element_t(state_t init_state, const ulong_int_t init_weight,
00112 const ulong_int_t init_sum,
00113 const prob_and_property_trans_t init_prob_and_property_trans):
00114 state(init_state), weight(init_weight), sum(init_sum),
00115 prob_and_property_trans(init_prob_and_property_trans) { }
00116 state_t state;
00117 ulong_int_t weight;
00118 ulong_int_t sum;
00119 prob_and_property_trans_t prob_and_property_trans;
00120 };
00121
00122
00124
00129 class prob_succ_container_t: public array_t<prob_succ_element_t>
00130 {
00131 public:
00134 prob_succ_container_t(): array_t<prob_succ_element_t>(4096, 16) {}
00137 prob_succ_container_t(const explicit_system_t & system):
00138 array_t<prob_succ_element_t>(system.get_preallocation_count(), 16) {}
00140 ~prob_succ_container_t() {}
00141 };
00142
00143
00144 #ifndef DOXYGEN_PROCESSING
00145 }
00146 #include "common/undeb.hh"
00147
00148 #endif //DOXYGEN_PROCESSING
00149
00150 #endif
00151