XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
-void simcall_HANDLER_execution_waitany_for(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl* execs[],
- size_t count, double timeout)
+void simcall_HANDLER_execution_waitany_for(smx_simcall_t simcall,
+ const std::vector<simgrid::kernel::activity::ExecImpl*>* execs,
+ double timeout)
{
if (timeout < 0.0) {
simcall->timeout_cb_ = nullptr;
} else {
- simcall->timeout_cb_ = simgrid::simix::Timer::set(SIMIX_get_clock() + timeout, [simcall, execs, count]() {
+ simcall->timeout_cb_ = simgrid::simix::Timer::set(SIMIX_get_clock() + timeout, [simcall, execs]() {
simcall->timeout_cb_ = nullptr;
- for (size_t i = 0; i < count; i++) {
+ for (auto* exec : *execs) {
// Remove the first occurrence of simcall:
- auto* exec = execs[i];
- auto j = boost::range::find(exec->simcalls_, simcall);
+ auto j = boost::range::find(exec->simcalls_, simcall);
if (j != exec->simcalls_.end())
exec->simcalls_.erase(j);
}
});
}
- for (size_t i = 0; i < count; i++) {
+ for (auto* exec : *execs) {
/* associate this simcall to the the synchro */
- auto* exec = execs[i];
exec->simcalls_.push_back(simcall);
/* see if the synchro is already finished */
if (simcall->call_ == simix::Simcall::NONE) // FIXME: maybe a better way to handle this case
continue; // if process handling comm is killed
if (simcall->call_ == simix::Simcall::EXECUTION_WAITANY_FOR) {
- simgrid::kernel::activity::ExecImpl** execs = simcall_execution_waitany_for__get__execs(simcall);
- size_t count = simcall_execution_waitany_for__get__count(simcall);
+ const std::vector<simgrid::kernel::activity::ExecImpl*>* execs =
+ simcall_execution_waitany_for__get__execs(simcall);
- for (size_t i = 0; i < count; i++) {
+ for (auto* exec : *execs) {
// Remove the first occurrence of simcall:
- auto* exec = execs[i];
- auto j = boost::range::find(exec->simcalls_, simcall);
+ auto j = boost::range::find(exec->simcalls_, simcall);
if (j != exec->simcalls_.end())
exec->simcalls_.erase(j);
}
if (not MC_is_active() && not MC_record_replay_is_active()) {
- ExecImpl** element = std::find(execs, execs + count, this);
- int rank = (element != execs + count) ? element - execs : -1;
+ auto element = std::find(execs->begin(), execs->end(), this);
+ int rank = (element != execs->end()) ? std::distance(execs->begin(), element) : -1;
simcall_execution_waitany_for__set__result(simcall, rank);
}
}
unsigned int simcall_execution_waitany_for(simgrid::kernel::activity::ExecImpl* execs[], size_t count, double timeout)
{
- return simcall_BODY_execution_waitany_for(execs, count, timeout);
+ std::vector<simgrid::kernel::activity::ExecImpl*> execsv(execs, execs + count);
+ return simcall_BODY_execution_waitany_for(&execsv, timeout);
}
void simcall_process_join(smx_actor_t process, double timeout) // XBT_ATTRIB_DEPRECATED_v328
*/
#include "src/simix/popping_private.hpp"
-static inline simgrid::kernel::activity::ExecImpl** simcall_execution_waitany_for__get__execs(smx_simcall_t simcall)
+static inline const std::vector<simgrid::kernel::activity::ExecImpl*>* simcall_execution_waitany_for__get__execs(smx_simcall_t simcall)
{
- return simgrid::simix::unmarshal<simgrid::kernel::activity::ExecImpl**>(simcall->args_[0]);
+ return simgrid::simix::unmarshal<const std::vector<simgrid::kernel::activity::ExecImpl*>*>(simcall->args_[0]);
}
-static inline simgrid::kernel::activity::ExecImpl** simcall_execution_waitany_for__getraw__execs(smx_simcall_t simcall)
+static inline const std::vector<simgrid::kernel::activity::ExecImpl*>* simcall_execution_waitany_for__getraw__execs(smx_simcall_t simcall)
{
- return simgrid::simix::unmarshal_raw<simgrid::kernel::activity::ExecImpl**>(simcall->args_[0]);
+ return simgrid::simix::unmarshal_raw<const std::vector<simgrid::kernel::activity::ExecImpl*>*>(simcall->args_[0]);
}
-static inline void simcall_execution_waitany_for__set__execs(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl** arg)
+static inline void simcall_execution_waitany_for__set__execs(smx_simcall_t simcall, const std::vector<simgrid::kernel::activity::ExecImpl*>* arg)
{
- simgrid::simix::marshal<simgrid::kernel::activity::ExecImpl**>(simcall->args_[0], arg);
-}
-static inline size_t simcall_execution_waitany_for__get__count(smx_simcall_t simcall)
-{
- return simgrid::simix::unmarshal<size_t>(simcall->args_[1]);
-}
-static inline size_t simcall_execution_waitany_for__getraw__count(smx_simcall_t simcall)
-{
- return simgrid::simix::unmarshal_raw<size_t>(simcall->args_[1]);
-}
-static inline void simcall_execution_waitany_for__set__count(smx_simcall_t simcall, size_t arg)
-{
- simgrid::simix::marshal<size_t>(simcall->args_[1], arg);
+ simgrid::simix::marshal<const std::vector<simgrid::kernel::activity::ExecImpl*>*>(simcall->args_[0], arg);
}
static inline double simcall_execution_waitany_for__get__timeout(smx_simcall_t simcall)
{
- return simgrid::simix::unmarshal<double>(simcall->args_[2]);
+ return simgrid::simix::unmarshal<double>(simcall->args_[1]);
}
static inline double simcall_execution_waitany_for__getraw__timeout(smx_simcall_t simcall)
{
- return simgrid::simix::unmarshal_raw<double>(simcall->args_[2]);
+ return simgrid::simix::unmarshal_raw<double>(simcall->args_[1]);
}
static inline void simcall_execution_waitany_for__set__timeout(smx_simcall_t simcall, double arg)
{
- simgrid::simix::marshal<double>(simcall->args_[2], arg);
+ simgrid::simix::marshal<double>(simcall->args_[1], arg);
}
static inline int simcall_execution_waitany_for__get__result(smx_simcall_t simcall)
{
/* The prototype of all simcall handlers, automatically generated for you */
-XBT_PRIVATE void simcall_HANDLER_execution_waitany_for(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl** execs, size_t count, double timeout);
+XBT_PRIVATE void simcall_HANDLER_execution_waitany_for(smx_simcall_t simcall, const std::vector<simgrid::kernel::activity::ExecImpl*>* execs, double timeout);
XBT_PRIVATE void simcall_HANDLER_comm_recv(smx_simcall_t simcall, smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout, double rate);
XBT_PRIVATE boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> simcall_HANDLER_comm_irecv(smx_simcall_t simcall, smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double rate);
XBT_PRIVATE void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_actor_t sender, smx_mailbox_t mbox, double task_size, double rate, unsigned char* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout);
return simgrid::simix::unmarshal<R>(self->simcall_.result_);
}
-inline static int simcall_BODY_execution_waitany_for(simgrid::kernel::activity::ExecImpl** execs, size_t count, double timeout)
+inline static int simcall_BODY_execution_waitany_for(const std::vector<simgrid::kernel::activity::ExecImpl*>* execs, double timeout)
{
if (false) /* Go to that function to follow the code flow through the simcall barrier */
- simcall_HANDLER_execution_waitany_for(&SIMIX_process_self()->simcall_, execs, count, timeout);
- return simcall<int, simgrid::kernel::activity::ExecImpl**, size_t, double>(Simcall::EXECUTION_WAITANY_FOR, execs, count, timeout);
+ simcall_HANDLER_execution_waitany_for(&SIMIX_process_self()->simcall_, execs, timeout);
+ return simcall<int, const std::vector<simgrid::kernel::activity::ExecImpl*>*, double>(Simcall::EXECUTION_WAITANY_FOR, execs, timeout);
}
inline static void simcall_BODY_comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout, double rate)
return;
switch (simcall_.call_) {
case Simcall::EXECUTION_WAITANY_FOR:
- simcall_HANDLER_execution_waitany_for(&simcall_, simgrid::simix::unmarshal<simgrid::kernel::activity::ExecImpl**>(simcall_.args_[0]), simgrid::simix::unmarshal<size_t>(simcall_.args_[1]), simgrid::simix::unmarshal<double>(simcall_.args_[2]));
+ simcall_HANDLER_execution_waitany_for(&simcall_, simgrid::simix::unmarshal<const std::vector<simgrid::kernel::activity::ExecImpl*>*>(simcall_.args_[0]), simgrid::simix::unmarshal<double>(simcall_.args_[1]));
break;
case Simcall::COMM_RECV:
# Last but not the least, you should declare the new simix call in
# ./include/simgrid/simix.h (otherwise you will get a warning at compile time)
-int execution_waitany_for(simgrid::kernel::activity::ExecImpl** execs, size_t count, double timeout) [[block]];
+int execution_waitany_for(const std::vector<simgrid::kernel::activity::ExecImpl*>* execs, double timeout) [[block]];
void comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout, double rate) [[block]];
boost::intrusive_ptr<simgrid::kernel::activity::ActivityImpl> comm_irecv(smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double rate);