00001
00004 #ifndef DIVINE_POR_HH
00005 #define DIVINE_POR_HH
00006
00007 #ifndef DOXYGEN_PROCESSING
00008 #include <iostream>
00009 #include <stack>
00010 #include "system/explicit_system.hh"
00011 #include "system/dve/dve_explicit_system.hh"
00012 #include "common/bit_string.hh"
00013 #include "por/spor.hh"
00014
00015 using namespace std;
00016 namespace divine {
00017 #endif //DOXYGEN_PROCESSING
00018
00020 const std::size_t POR_FIRST = 1;
00022 const std::size_t POR_LAST = 2;
00024 const std::size_t POR_SMALLEST = 3;
00026 const std::size_t POR_FIND_ONLY = 4;
00027
00029
00033 class por_t {
00034 private:
00035 bool initialized;
00036 std::size_t size_of_glob_vars;
00037 std::size_t size_of_glob_vars_without_buffers;
00038 std::size_t *index_of_glob_var;
00039 dve_explicit_system_t *System;
00040 dve_symbol_table_t *Table;
00041 std::size_t choose_type;
00042 const process_t *prop_process;
00043 std::size_t trans_count, proc_count;
00044
00045 std::size_t *process_of_trans;
00046 size_int_t *state1_of_trans;
00047 bit_string_t *dep;
00048 bit_string_t *pre;
00049 bit_string_t trans_is_visible;
00050 void find_visible_symbols_from_ba(bool *glob_vars, bool *loc_states);
00051 void find_visible_symbols_from_expr(list<expression_t*>* vis_list, bool *glob_vars, bool *loc_states);
00052 void parse_effect_expr(const expression_t *expr0, bool *glob_vars);
00053 void parse_guard_expr(const expression_t *expr0, bool *glob_vars, bool *loc_states);
00054 bool set_pre(bool *trans_scan_loc_states, bool *trans_scan_vars, bool *trans_change_vars, const transition_t *trans1, const transition_t *trans2);
00055 std::size_t choose_ample_set(bool *ample_sets, enabled_trans_container_t *enabled_trans);
00056 public:
00057 bool count_approx_interuptions;
00058 unsigned *pre_interupted;
00059 unsigned *dep_interupted;
00060 unsigned *vis_interupted;
00061 bit_string_t *full_pre, *full_dep, full_vis;
00063 inline por_t(void);
00065 void set_choose_type(std::size_t type) {choose_type = type; }
00067
00070 void init(explicit_system_t *S, list<expression_t*>* vis_list = NULL);
00072
00086 int generate_composed_ample_sets(state_t s, bool *ample_sets, enabled_trans_container_t **ample_trans, enabled_trans_container_t &all_enabled_trans);
00088
00099 int generate_ample_sets(state_t s, bool *ample_sets, enabled_trans_container_t &enabled_trans, std::size_t &le_proc_gid);
00101
00113 int ample_set(state_t s, enabled_trans_container_t &enabled_trans, std::size_t &proc_gid);
00115
00127 int ample_set_succs(state_t s, succ_container_t & succs, std::size_t &proc_gid);
00129 bit_string_t get_visibility();
00131 void static_c3();
00133 void set_visibility(bit_string_t trans);
00135 void get_pre(bit_string_t* result);
00136
00137 void set_pre(bit_string_t* new_pre);
00138
00139 void get_dep(bit_string_t* result);
00140
00141 void set_dep(bit_string_t* new_dep);
00143 ~por_t();
00144 };
00145
00146 inline por_t::por_t(void)
00147 { choose_type=POR_FIND_ONLY; initialized = false;
00148 }
00149
00150 };
00151
00152
00153 #endif //DIVINE_POR_HH