static xbt_heap_t simix_timers = nullptr;
/** @brief Timer datatype */
-typedef struct s_smx_timer {
+typedef class s_smx_timer {
double date = 0.0;
- simgrid::xbt::Task<void()> callback;
+ s_smx_timer() = default;
- s_smx_timer()=default;
+public:
+ simgrid::xbt::Task<void()> callback;
+ double getDate() { return date; }
s_smx_timer(double date, simgrid::xbt::Task<void()> callback) : date(date), callback(std::move(callback)) {}
} s_smx_timer_t;
{
surf_action_t action;
- for(auto model : *all_existing_models) {
+ for (auto const& model : *all_existing_models) {
XBT_DEBUG("Handling the processes whose action failed (if any)");
while ((action = surf_model_extract_failed_action_set(model))) {
XBT_DEBUG(" Handling Action %p",action);
/* Run all processes that are ready to run, possibly in parallel */
SIMIX_process_runall();
- /* Move all killer processes to the end of the list, because killing a process that have an ongoing simcall is a bad idea */
- simgrid::xbt::three_way_partition(begin(simix_global->process_that_ran), end(simix_global->process_that_ran),
- [](smx_actor_t p) {
- switch (p->simcall.call) {
- case SIMCALL_NONE:
- case SIMCALL_PROCESS_KILL:
- return 2;
- // case SIMCALL_PROCESS_RESUME:
- // return 1;
- default:
- return 0;
- }
- });
-
/* answer sequentially and in a fixed arbitrary order all the simcalls that were issued during that sub-round */
/* WARNING, the order *must* be fixed or you'll jeopardize the simulation reproducibility (see RR-7653) */
* That would thus be a pure waste of time.
*/
- for (smx_actor_t process : simix_global->process_that_ran) {
+ for (smx_actor_t const& process : simix_global->process_that_ran) {
if (process->simcall.call != SIMCALL_NONE) {
SIMIX_simcall_handle(&process->simcall, 0);
}
/* If only daemon processes remain, cancel their actions, mark them to die and reschedule them */
if (simix_global->process_list.size() == simix_global->daemons.size())
- for (const auto& dmon : simix_global->daemons) {
+ for (auto const& dmon : simix_global->daemons) {
XBT_DEBUG("Kill %s", dmon->cname());
SIMIX_process_kill(dmon, simix_global->maestro_process);
}
} while (again);
/* Autorestart all process */
- for (auto host: host_that_restart) {
+ for (auto const& host : host_that_restart) {
XBT_INFO("Restart processes on host %s", host->getCname());
SIMIX_host_autorestart(host);
}
/** @brief cancels a timer that was added earlier */
void SIMIX_timer_remove(smx_timer_t timer) {
- xbt_heap_rm_elm(simix_timers, timer, timer->date);
+ delete static_cast<smx_timer_t>(xbt_heap_rm_elm(simix_timers, timer, timer->getDate()));
}
/** @brief Returns the date at which the timer will trigger (or 0 if nullptr timer) */
double SIMIX_timer_get_date(smx_timer_t timer) {
- return timer?timer->date:0;
+ return timer ? timer->getDate() : 0;
}
/**
XBT_INFO("%d processes are still running, waiting for something.", nbprocess);
/* List the process and their state */
XBT_INFO("Legend of the following listing: \"Process <pid> (<name>@<host>): <status>\"");
- for (auto kv : simix_global->process_list) {
+ for (auto const& kv : simix_global->process_list) {
smx_actor_t process = kv.second;
if (process->waiting_synchro) {