X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/62cf03cdcc6b288127b682a8ec047fd91ca7b378..5ac17b95ed6baf225a7d90d65536e0ce1843ec93:/src/s4u/s4u_Mailbox.cpp diff --git a/src/s4u/s4u_Mailbox.cpp b/src/s4u/s4u_Mailbox.cpp index a294219761..03c12aa6c4 100644 --- a/src/s4u/s4u_Mailbox.cpp +++ b/src/s4u/s4u_Mailbox.cpp @@ -5,10 +5,8 @@ #include "simgrid/s4u/Comm.hpp" #include "simgrid/s4u/Mailbox.hpp" -#include "src/msg/msg_private.hpp" -#include "src/simix/ActorImpl.hpp" -#include "src/simix/smx_network_private.hpp" -#include "xbt/log.h" +#include "src/kernel/activity/MailboxImpl.hpp" +#include XBT_LOG_EXTERNAL_CATEGORY(s4u); XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_channel, s4u, "S4U Communication Mailboxes"); @@ -26,7 +24,7 @@ const char* Mailbox::get_cname() const return pimpl_->get_cname(); } -MailboxPtr Mailbox::by_name(const char* name) +MailboxPtr Mailbox::by_name(std::string name) { kernel::activity::MailboxImpl* mbox = kernel::activity::MailboxImpl::byNameOrNull(name); if (mbox == nullptr) { @@ -35,11 +33,6 @@ MailboxPtr Mailbox::by_name(const char* name) return MailboxPtr(&mbox->piface_, true); } -MailboxPtr Mailbox::by_name(std::string name) -{ - return by_name(name.c_str()); -} - bool Mailbox::empty() { return pimpl_->comm_queue.empty(); @@ -145,3 +138,28 @@ void* Mailbox::get(double timeout) } } // namespace s4u } // namespace simgrid + +/* **************************** Public C interface *************************** */ +/** \brief Set the mailbox to receive in asynchronous mode + * + * All messages sent to this mailbox will be transferred to the receiver without waiting for the receive call. + * The receive call will still be necessary to use the received data. + * If there is a need to receive some messages asynchronously, and some not, two different mailboxes should be used. + * + * \param alias The name of the mailbox + */ +void sg_mailbox_set_receiver(const char* alias) +{ + simgrid::s4u::Mailbox::by_name(alias)->set_receiver(simgrid::s4u::Actor::self()); + XBT_VERB("%s mailbox set to receive eagerly for myself\n", alias); +} + +/** \brief Check if there is a communication going on in a mailbox. + * + * \param alias the name of the mailbox to be considered + * \return Returns 1 if there is a communication, 0 otherwise + */ +int sg_mailbox_listen(const char* alias) +{ + return simgrid::s4u::Mailbox::by_name(alias)->listen() ? 1 : 0; +}