XBT_PUBLIC unsigned int simcall_comm_waitany(smx_activity_t* comms, size_t count, double timeout);
XBT_PUBLIC void simcall_comm_wait(const smx_activity_t& comm, double timeout);
XBT_PUBLIC int simcall_comm_test(const smx_activity_t& comm);
-XBT_PUBLIC int simcall_comm_testany(smx_activity_t* comms, size_t count);
+XBT_PUBLIC int simcall_comm_testany(smx_activity_t comms[], size_t count);
#endif
/************************** Synchro simcalls **********************************/
}
}
-void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::ActivityImplPtr comms[],
- size_t count)
+void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comms[], size_t count)
{
// The default result is -1 -- this means, "nothing is ready".
// It can be changed below, but only if something matches.
if (idx == -1) {
SIMIX_simcall_answer(simcall);
} else {
- simgrid::kernel::activity::ActivityImplPtr synchro = comms[idx];
+ simgrid::kernel::activity::CommImpl* comm = comms[idx];
simcall_comm_testany__set__result(simcall, idx);
- synchro->simcalls_.push_back(simcall);
- synchro->state_ = SIMIX_DONE;
- boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro)->finish();
+ comm->simcalls_.push_back(simcall);
+ comm->state_ = SIMIX_DONE;
+ comm->finish();
}
return;
}
for (std::size_t i = 0; i != count; ++i) {
- simgrid::kernel::activity::ActivityImplPtr synchro = comms[i];
- if (synchro->state_ != SIMIX_WAITING && synchro->state_ != SIMIX_RUNNING) {
+ simgrid::kernel::activity::ActivityImplPtr comm = comms[i];
+ if (comm->state_ != SIMIX_WAITING && comm->state_ != SIMIX_RUNNING) {
simcall_comm_testany__set__result(simcall, i);
- synchro->simcalls_.push_back(simcall);
- boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro)->finish();
+ comm->simcalls_.push_back(simcall);
+ comm->finish();
return;
}
}
break;
case SIMCALL_COMM_TESTANY:
- remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__getraw__comms(req) + idx));
+ remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__get__comms(req) + idx));
break;
default:
state->internal_req.call = SIMCALL_COMM_TEST;
if (state->transition.argument > 0) {
- simgrid::kernel::activity::ActivityImpl* remote_comm = mc_model_checker->process().read(
- remote(simcall_comm_testany__getraw__comms(req) + state->transition.argument));
- mc_model_checker->process().read(state->internal_comm,
- remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_comm)));
+ simgrid::kernel::activity::CommImpl* remote_comm =
+ mc_model_checker->process().read(remote(simcall_comm_testany__get__comms(req) + state->transition.argument));
+ mc_model_checker->process().read(state->internal_comm, remote(remote_comm));
}
simcall_comm_test__set__comm(&state->internal_req, state->internal_comm.getBuffer());
/**
* @ingroup simix_comm_management
*/
-int simcall_comm_testany(smx_activity_t* comms, size_t count)
+int simcall_comm_testany(smx_activity_t comms[], size_t count)
{
if (count == 0)
return -1;
- return simcall_BODY_comm_testany(comms, count);
+ std::unique_ptr<simgrid::kernel::activity::CommImpl* []> rcomms(new simgrid::kernel::activity::CommImpl*[count]);
+ std::transform(comms, comms + count, rcomms.get(), [](const smx_activity_t comm) {
+ return static_cast<simgrid::kernel::activity::CommImpl*>(comm.get());
+ });
+ return simcall_BODY_comm_testany(rcomms.get(), count);
}
/**
simgrid::simix::marshal<int>(simcall->result, result);
}
-static inline boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* simcall_comm_testany__get__comms(smx_simcall_t simcall)
+static inline simgrid::kernel::activity::CommImpl** simcall_comm_testany__get__comms(smx_simcall_t simcall)
{
- return simgrid::simix::unmarshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*>(simcall->args[0]);
+ return simgrid::simix::unmarshal<simgrid::kernel::activity::CommImpl**>(simcall->args[0]);
}
-static inline simgrid::kernel::activity::ActivityImpl** simcall_comm_testany__getraw__comms(smx_simcall_t simcall)
+static inline simgrid::kernel::activity::CommImpl** simcall_comm_testany__getraw__comms(smx_simcall_t simcall)
{
- return simgrid::simix::unmarshal_raw<simgrid::kernel::activity::ActivityImpl**>(simcall->args[0]);
+ return simgrid::simix::unmarshal_raw<simgrid::kernel::activity::CommImpl**>(simcall->args[0]);
}
-static inline void simcall_comm_testany__set__comms(smx_simcall_t simcall, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* arg)
+static inline void simcall_comm_testany__set__comms(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl** arg)
{
- simgrid::simix::marshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*>(simcall->args[0], arg);
+ simgrid::simix::marshal<simgrid::kernel::activity::CommImpl**>(simcall->args[0], arg);
}
static inline size_t simcall_comm_testany__get__count(smx_simcall_t simcall)
{
XBT_PRIVATE void simcall_HANDLER_comm_wait(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comm,
double timeout);
XBT_PRIVATE void simcall_HANDLER_comm_test(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comm);
-XBT_PRIVATE void simcall_HANDLER_comm_testany(smx_simcall_t simcall, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count);
+XBT_PRIVATE void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl** comms,
+ size_t count);
XBT_PRIVATE void simcall_HANDLER_mutex_lock(smx_simcall_t simcall, smx_mutex_t mutex);
XBT_PRIVATE int simcall_HANDLER_mutex_trylock(smx_simcall_t simcall, smx_mutex_t mutex);
XBT_PRIVATE void simcall_HANDLER_mutex_unlock(smx_simcall_t simcall, smx_mutex_t mutex);
return simcall<int, simgrid::kernel::activity::CommImpl*>(SIMCALL_COMM_TEST, comm);
}
-inline static int simcall_BODY_comm_testany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count)
+inline static int simcall_BODY_comm_testany(simgrid::kernel::activity::CommImpl** comms, size_t count)
{
if (0) /* Go to that function to follow the code flow through the simcall barrier */
simcall_HANDLER_comm_testany(&SIMIX_process_self()->simcall, comms, count);
- return simcall<int, boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*, size_t>(SIMCALL_COMM_TESTANY, comms, count);
+ return simcall<int, simgrid::kernel::activity::CommImpl**, size_t>(SIMCALL_COMM_TESTANY, comms, count);
}
inline static void simcall_BODY_mutex_lock(smx_mutex_t mutex)
break;
case SIMCALL_COMM_TESTANY:
- simcall_HANDLER_comm_testany(simcall, simgrid::simix::unmarshal<boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>*>(simcall->args[0]), simgrid::simix::unmarshal<size_t>(simcall->args[1]));
+ simcall_HANDLER_comm_testany(simcall,
+ simgrid::simix::unmarshal<simgrid::kernel::activity::CommImpl**>(simcall->args[0]),
+ simgrid::simix::unmarshal<size_t>(simcall->args[1]));
break;
case SIMCALL_MUTEX_LOCK:
int comm_waitany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count, double timeout) [[block]];
void comm_wait(simgrid::kernel::activity::CommImpl* comm, double timeout) [[block]];
int comm_test(simgrid::kernel::activity::CommImpl* comm) [[block]];
-int comm_testany(boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl>* comms, size_t count) [[block]];
+int comm_testany(simgrid::kernel::activity::CommImpl** comms, size_t count) [[block]];
void mutex_lock(smx_mutex_t mutex) [[block]];
int mutex_trylock(smx_mutex_t mutex);