#include <cassert>
#include <cstdio>
-#include <list>
+#include <memory>
+#include <string>
+#include <vector>
#include <xbt/log.h>
#include <xbt/sysdep.h>
RecordTrace SafetyChecker::getRecordTrace() // override
{
RecordTrace res;
- for (auto const& state : stack_) {
- int value = 0;
- smx_simcall_t saved_req = MC_state_get_executed_request(state.get(), &value);
- const smx_process_t issuer = MC_smx_simcall_get_issuer(saved_req);
- const int pid = issuer->pid;
- res.push_back(RecordTraceElement(pid, value));
- }
+ for (auto const& state : stack_)
+ res.push_back(state->getRecordElement());
return res;
}
{
std::vector<std::string> trace;
for (auto const& state : stack_) {
- int value;
- smx_simcall_t req = MC_state_get_executed_request(state.get(), &value);
+ int value = state->req_num;
+ smx_simcall_t req = &state->executed_req;
if (req)
trace.push_back(simgrid::mc::request_to_string(
req, value, simgrid::mc::RequestType::executed));
if (dot_output != nullptr)
req_str = simgrid::mc::request_get_dot_output(req, value);
- MC_state_set_executed_request(state, req, value);
mc_stats->executed_transitions++;
// TODO, bundle both operations in a single message
/* Get an enabled process and insert it in the interleave set of the next state */
for (auto& p : mc_model_checker->process().simix_processes())
if (simgrid::mc::process_is_enabled(&p.copy)) {
- MC_state_interleave_process(next_state.get(), &p.copy);
+ next_state->interleave(&p.copy);
if (reductionMode_ != simgrid::mc::ReductionMode::none)
break;
}
&& simgrid::mc::request_depend(req, MC_state_get_internal_request(prev_state))) {
if (XBT_LOG_ISENABLED(mc_safety, xbt_log_priority_debug)) {
XBT_DEBUG("Dependent Transitions:");
- int value;
- smx_simcall_t prev_req = MC_state_get_executed_request(prev_state, &value);
+ int value = prev_state->req_num;
+ smx_simcall_t prev_req = &prev_state->executed_req;
XBT_DEBUG("%s (state=%d)",
simgrid::mc::request_to_string(
prev_req, value, simgrid::mc::RequestType::internal).c_str(),
prev_state->num);
- prev_req = MC_state_get_executed_request(state.get(), &value);
+ value = state->req_num;
+ prev_req = &state->executed_req;
XBT_DEBUG("%s (state=%d)",
simgrid::mc::request_to_string(
prev_req, value, simgrid::mc::RequestType::executed).c_str(),
state->num);
}
- if (!prev_state->processStates[issuer->pid].done())
- MC_state_interleave_process(prev_state, issuer);
+ if (!prev_state->processStates[issuer->pid].isDone())
+ prev_state->interleave(issuer);
else
XBT_DEBUG("Process %p is in done set", req->issuer);
/* Get an enabled process and insert it in the interleave set of the initial state */
for (auto& p : mc_model_checker->process().simix_processes())
if (simgrid::mc::process_is_enabled(&p.copy)) {
- MC_state_interleave_process(initial_state.get(), &p.copy);
+ initial_state->interleave(&p.copy);
if (reductionMode_ != simgrid::mc::ReductionMode::none)
break;
}