X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/83fc089ec8c7ff7c1cdfaff6fc9c49fed6c6cfcb..d34fd82d9f988a857f4f68c546400dc6637dcc41:/src/mc/mc_state.hpp diff --git a/src/mc/mc_state.hpp b/src/mc/mc_state.hpp index 71c8f7b8c7..739a40252a 100644 --- a/src/mc/mc_state.hpp +++ b/src/mc/mc_state.hpp @@ -15,21 +15,23 @@ namespace mc { /* A node in the exploration graph (kind-of) */ class XBT_PRIVATE State { + static long expended_states_; /* Count total amount of states, for stats */ + + /* Outgoing transition: what was the last transition that we took to leave this state? Useful for replay */ + std::unique_ptr transition_; + public: + explicit State(); + /** Sequential state number (used for debugging) */ - int num_ = 0; + long num_ = 0; /** State's exploration status by process */ std::vector actor_states_; - Transition transition_; - /** The simcall which was executed, going out of that state */ s_smx_simcall executed_req_; - /** Observer of the transition leading to that sate */ - RemotePtr remote_observer_; - /** Snapshot of system state (if needed) */ std::shared_ptr system_state_; @@ -37,11 +39,20 @@ public: std::vector> incomplete_comm_pattern_; std::vector communication_indices_; - explicit State(unsigned long state_number); + + /* Returns a positive number if there is another transition to pick, or -1 if not */ + int next_transition() const; + + /* Explore a new path */ + Transition* execute_next(int next); std::size_t count_todo() const; - void mark_todo(const simgrid::kernel::actor::ActorImpl* actor) { this->actor_states_[actor->get_pid()].mark_todo(); } - Transition get_transition() const; + void mark_todo(aid_t actor) { this->actor_states_[actor].mark_todo(); } + Transition* get_transition() const; + void set_transition(Transition* t) { transition_.reset(t); } + + /* Returns the total amount of states created so far (for statistics) */ + static long get_expanded_states() { return expended_states_; } private: void copy_incomplete_comm_pattern();