X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/be30b8efb55c3240d1825982dd7fe921d6e1c472..3f76493a3a2331163914bcb7bd575b07c2a79af9:/src/s4u/s4u_Mailbox.cpp diff --git a/src/s4u/s4u_Mailbox.cpp b/src/s4u/s4u_Mailbox.cpp index d153c08080..abbf92e21a 100644 --- a/src/s4u/s4u_Mailbox.cpp +++ b/src/s4u/s4u_Mailbox.cpp @@ -44,6 +44,15 @@ bool Mailbox::listen() return not this->empty() || (pimpl_->permanent_receiver_ && not pimpl_->done_comm_queue_.empty()); } +aid_t Mailbox::listen_from() +{ + kernel::activity::CommImplPtr comm = front(); + if (comm && comm->src_actor_) + return comm->src_actor_->get_pid(); + else + return -1; +} + bool Mailbox::ready() { bool comm_ready = false; @@ -153,7 +162,8 @@ void* Mailbox::get(double timeout) return res; } -smx_activity_t Mailbox::iprobe(int type, bool (*match_fun)(void*, void*, kernel::activity::CommImpl*), void* data) +kernel::activity::ActivityImplPtr +Mailbox::iprobe(int type, bool (*match_fun)(void*, void*, kernel::activity::CommImpl*), void* data) { return kernel::actor::simcall([this, type, match_fun, data] { return pimpl_->iprobe(type, match_fun, data); }); } @@ -166,7 +176,7 @@ sg_mailbox_t sg_mailbox_by_name(const char* alias) return simgrid::s4u::Mailbox::by_name(alias); } -const char* sg_mailbox_get_name(sg_mailbox_t mailbox) +const char* sg_mailbox_get_name(const_sg_mailbox_t mailbox) { return mailbox->get_cname(); } @@ -200,9 +210,16 @@ void* sg_mailbox_get(sg_mailbox_t mailbox) return mailbox->get(); } +sg_comm_t sg_mailbox_get_async(sg_mailbox_t mailbox, void** data) +{ + auto comm = mailbox->get_async(data); + comm->add_ref(); + return comm.get(); +} + void sg_mailbox_put(sg_mailbox_t mailbox, void* payload, long simulated_size_in_bytes) { - return mailbox->put(payload, simulated_size_in_bytes); + mailbox->put(payload, simulated_size_in_bytes); } sg_comm_t sg_mailbox_put_async(sg_mailbox_t mailbox, void* payload, long simulated_size_in_bytes) @@ -211,3 +228,10 @@ sg_comm_t sg_mailbox_put_async(sg_mailbox_t mailbox, void* payload, long simulat comm->add_ref(); return comm.get(); } + +sg_comm_t sg_mailbox_put_init(sg_mailbox_t mailbox, void* payload, long simulated_size_in_bytes) +{ + auto comm = mailbox->put_init(payload, simulated_size_in_bytes); + comm->add_ref(); + return comm.get(); +}