From b642efcdaf99b4b005de676991bd740db74ab223 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 26 Apr 2016 09:58:49 +0200 Subject: [PATCH] complete the API of s4u::Mailbox --- include/simgrid/s4u/mailbox.hpp | 11 +++++++++++ src/s4u/s4u_mailbox.cpp | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/simgrid/s4u/mailbox.hpp b/include/simgrid/s4u/mailbox.hpp index 387f63b6d8..f1b2f3ff3a 100644 --- a/include/simgrid/s4u/mailbox.hpp +++ b/include/simgrid/s4u/mailbox.hpp @@ -43,6 +43,15 @@ public: /** Returns whether the mailbox contains queued communications */ bool empty(); + /** Declare that the specified process is a permanent receiver on that mailbox + * + * It means that the communications sent to this mailbox will start flowing to its host even before he does a recv(). + * This models the real behavior of TCP and MPI communications, amongst other. + */ + void setReceiver(smx_process_t process); + /** Return the process declared as permanent receiver, or nullptr if none **/ + smx_process_t receiver(); + private: std::string name_; smx_mailbox_t inferior_; @@ -54,5 +63,7 @@ private: XBT_PUBLIC(sg_mbox_t) sg_mbox_by_name(const char*name); XBT_PUBLIC(int) sg_mbox_is_empty(sg_mbox_t mbox); +XBT_PUBLIC(void)sg_mbox_setReceiver(sg_mbox_t mbox, smx_process_t process); +XBT_PUBLIC(smx_process_t) sg_mbox_receiver(sg_mbox_t mbox); #endif /* SIMGRID_S4U_MAILBOX_HPP */ diff --git a/src/s4u/s4u_mailbox.cpp b/src/s4u/s4u_mailbox.cpp index c057113f54..ace9d8cf2c 100644 --- a/src/s4u/s4u_mailbox.cpp +++ b/src/s4u/s4u_mailbox.cpp @@ -45,9 +45,24 @@ bool s4u::Mailbox::empty() { return nullptr == simcall_mbox_get_head(inferior_); } +void s4u::Mailbox::setReceiver(smx_process_t process) { + simcall_mbox_set_receiver(inferior_, process); +} +smx_process_t s4u::Mailbox::receiver() { + return simcall_mbox_get_receiver(inferior_); +} + +/*------- C functions -------*/ + sg_mbox_t sg_mbox_by_name(const char*name){ return s4u::Mailbox::byName(name); } int sg_mbox_is_empty(sg_mbox_t mbox) { return mbox->empty(); } +void sg_mbox_setReceiver(sg_mbox_t mbox, smx_process_t process) { + mbox->setReceiver(process); +} +smx_process_t sg_mbox_receiver(sg_mbox_t mbox) { + return mbox->receiver(); +} -- 2.20.1