X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/69aaa26fa5228c31e55086fa166479732a9cd1b7..94f76952308050e13df40d4df3852da353f73f35:/src/s4u/s4u_Comm.cpp diff --git a/src/s4u/s4u_Comm.cpp b/src/s4u/s4u_Comm.cpp index 6dca641353..bcf557de35 100644 --- a/src/s4u/s4u_Comm.cpp +++ b/src/s4u/s4u_Comm.cpp @@ -39,12 +39,12 @@ Comm::~Comm() } } -int Comm::wait_any_for(const std::vector& comms, double timeout) +ssize_t Comm::wait_any_for(const std::vector& comms, double timeout) { std::vector rcomms(comms.size()); std::transform(begin(comms), end(comms), begin(rcomms), [](const CommPtr& comm) { return static_cast(comm->pimpl_.get()); }); - int changed_pos = simcall_comm_waitany(rcomms.data(), rcomms.size(), timeout); + ssize_t changed_pos = simcall_comm_waitany(rcomms.data(), rcomms.size(), timeout); if (changed_pos != -1) comms.at(changed_pos)->complete(State::FINISHED); return changed_pos; @@ -245,12 +245,12 @@ Comm* Comm::wait_for(double timeout) return this; } -int Comm::test_any(const std::vector& comms) +ssize_t Comm::test_any(const std::vector& comms) { std::vector rcomms(comms.size()); std::transform(begin(comms), end(comms), begin(rcomms), [](const CommPtr& comm) { return static_cast(comm->pimpl_.get()); }); - int changed_pos = simcall_comm_testany(rcomms.data(), rcomms.size()); + ssize_t changed_pos = simcall_comm_testany(rcomms.data(), rcomms.size()); if (changed_pos != -1) comms.at(changed_pos)->complete(State::FINISHED); return changed_pos; @@ -297,6 +297,12 @@ Actor* Comm::get_sender() const return sender ? sender->get_ciface() : nullptr; } +CommPtr Comm::set_copy_data_callback(void (*callback)(kernel::activity::CommImpl*, void*, size_t)) +{ + copy_data_function_ = callback; + return this; +} + } // namespace s4u } // namespace simgrid /* **************************** Public C interface *************************** */ @@ -356,20 +362,20 @@ size_t sg_comm_wait_all_for(sg_comm_t* comms, size_t count, double timeout) return pos; } -int sg_comm_wait_any(sg_comm_t* comms, size_t count) +ssize_t sg_comm_wait_any(sg_comm_t* comms, size_t count) { return sg_comm_wait_any_for(comms, count, -1); } -int sg_comm_wait_any_for(sg_comm_t* comms, size_t count, double timeout) +ssize_t sg_comm_wait_any_for(sg_comm_t* comms, size_t count, double timeout) { std::vector s4u_comms; - for (unsigned int i = 0; i < count; i++) + for (size_t i = 0; i < count; i++) s4u_comms.emplace_back(comms[i], false); - int pos = simgrid::s4u::Comm::wait_any_for(s4u_comms, timeout); - for (unsigned i = 0; i < count; i++) { - if (pos != -1 && static_cast(pos) != i) + ssize_t pos = simgrid::s4u::Comm::wait_any_for(s4u_comms, timeout); + for (size_t i = 0; i < count; i++) { + if (pos != -1 && static_cast(pos) != i) s4u_comms[i]->add_ref(); } return pos;