X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/932e745735378c442e2348a3a428d97b69398f86..2bdd4ab1f667695dbf8aeedfe7d3d940991146cd:/src/mc/mc_state.h diff --git a/src/mc/mc_state.h b/src/mc/mc_state.h index 032a6e5b4d..fa5ddb98d7 100644 --- a/src/mc/mc_state.h +++ b/src/mc/mc_state.h @@ -59,28 +59,46 @@ struct PatternCommunication { }; -/* Possible exploration status of a process in a state */ -enum class ProcessInterleaveState { - no_interleave=0, /* Do not interleave (do not execute) */ - interleave, /* Interleave the process (one or more request) */ - more_interleave, /* Interleave twice the process (for mc_random simcall) */ - done /* Already interleaved */ -}; - /* On every state, each process has an entry of the following type */ -struct ProcessState { +class ProcessState { + /* Possible exploration status of a process in a state */ + enum class InterleavingType { + /** We do not have to execute this process transitions */ + disabled = 0, + /** We still have to execute (some of) this process transitions */ + interleave, + /** We have already executed this process transitions */ + done, + }; + /** Exploration control information */ - ProcessInterleaveState state = ProcessInterleaveState::no_interleave; + InterleavingType state = InterleavingType::disabled; +public: + /** Number of times that the process was interleaved */ - unsigned int interleave_count; + // TODO, make this private + unsigned int interleave_count = 0; - bool done() const + bool isDisabled() const { - return this->state == ProcessInterleaveState::done; + return this->state == InterleavingType::disabled; } - bool interleave() const { - return this->state == ProcessInterleaveState::interleave - || this->state == ProcessInterleaveState::more_interleave; + bool isDone() const + { + return this->state == InterleavingType::done; + } + bool isToInterleave() const + { + return this->state == InterleavingType::interleave; + } + void interleave() + { + this->state = InterleavingType::interleave; + this->interleave_count = 0; + } + void setDone() + { + this->state = InterleavingType::done; } }; @@ -134,6 +152,10 @@ struct XBT_PRIVATE State { State(); std::size_t interleaveSize() const; + void interleave(smx_process_t process) + { + this->processStates[process->pid].interleave(); + } }; XBT_PRIVATE void replay(std::list> const& stack); @@ -142,7 +164,6 @@ XBT_PRIVATE void replay(std::list> const& st } XBT_PRIVATE simgrid::mc::State* MC_state_new(void); -XBT_PRIVATE void MC_state_interleave_process(simgrid::mc::State* state, smx_process_t process); XBT_PRIVATE smx_simcall_t MC_state_get_executed_request(simgrid::mc::State* state, int *value); XBT_PRIVATE smx_simcall_t MC_state_get_internal_request(simgrid::mc::State* state); XBT_PRIVATE smx_simcall_t MC_state_get_request(simgrid::mc::State* state, int *value);