Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make mailbox matching functions return a bool.
[simgrid.git] / src / kernel / activity / MailboxImpl.cpp
index c7a8362..8915ec7 100644 (file)
@@ -64,7 +64,7 @@ void MailboxImpl::set_receiver(s4u::ActorPtr actor)
  */
 void MailboxImpl::push(CommImplPtr comm)
 {
-  comm->mbox = this;
+  comm->set_mailbox(this);
   this->comm_queue_.push_back(std::move(comm));
 }
 
@@ -73,9 +73,10 @@ void MailboxImpl::push(CommImplPtr comm)
  */
 void MailboxImpl::remove(const CommImplPtr& comm)
 {
-  xbt_assert(comm->mbox == this, "Comm %p is in mailbox %s, not mailbox %s", comm.get(),
-             (comm->mbox ? comm->mbox->get_cname() : "(null)"), this->get_cname());
-  comm->mbox = nullptr;
+  xbt_assert(comm->get_mailbox() == this, "Comm %p is in mailbox %s, not mailbox %s", comm.get(),
+             (comm->get_mailbox() ? comm->get_mailbox()->get_cname() : "(null)"), this->get_cname());
+
+  comm->set_mailbox(nullptr);
   for (auto it = this->comm_queue_.begin(); it != this->comm_queue_.end(); it++)
     if (*it == comm) {
       this->comm_queue_.erase(it);
@@ -84,7 +85,7 @@ void MailboxImpl::remove(const CommImplPtr& comm)
   xbt_die("Comm %p not found in mailbox %s", comm.get(), this->get_cname());
 }
 
-CommImplPtr MailboxImpl::iprobe(int type, int (*match_fun)(void*, void*, CommImpl*), void* data)
+CommImplPtr MailboxImpl::iprobe(int type, bool (*match_fun)(void*, void*, CommImpl*), void* data)
 {
   XBT_DEBUG("iprobe from %p %p", this, &comm_queue_);
 
@@ -121,7 +122,7 @@ CommImplPtr MailboxImpl::iprobe(int type, int (*match_fun)(void*, void*, CommImp
  *  @param remove_matching whether or not to clean the found object from the queue
  *  @return The communication activity if found, nullptr otherwise
  */
-CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, int (*match_fun)(void*, void*, CommImpl*),
+CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, bool (*match_fun)(void*, void*, CommImpl*),
                                             void* this_user_data, const CommImplPtr& my_synchro, bool done,
                                             bool remove_matching)
 {
@@ -140,9 +141,9 @@ CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, int (*match_fun
         (not comm->match_fun || comm->match_fun(other_user_data, this_user_data, my_synchro.get()))) {
       XBT_DEBUG("Found a matching communication synchro %p", comm.get());
 #if SIMGRID_HAVE_MC
-      comm->mbox_cpy = comm->mbox;
+      comm->mbox_cpy = comm->get_mailbox();
 #endif
-      comm->mbox = nullptr;
+      comm->set_mailbox(nullptr);
       CommImplPtr comm_cpy = comm;
       if (remove_matching)
         comm_queue.erase(it);