Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
(partially) convert simix::MailboxImpl to C++
[simgrid.git] / src / simix / MailboxImpl.cpp
index c30d784..9936448 100644 (file)
@@ -15,24 +15,6 @@ void SIMIX_mailbox_exit()
 {
   xbt_dict_free(&mailboxes);
 }
-
-/******************************************************************************/
-/*                           Rendez-Vous Points                               */
-/******************************************************************************/
-
-smx_mailbox_t SIMIX_mbox_create(const char* name)
-{
-  xbt_assert(name, "Mailboxes must have a name");
-  /* two processes may have pushed the same mbox_create simcall at the same time */
-  smx_mailbox_t mbox = static_cast<smx_mailbox_t>(xbt_dict_get_or_null(mailboxes, name));
-  if (!mbox) {
-    mbox = new simgrid::simix::MailboxImpl(name);
-    XBT_DEBUG("Creating a mailbox at %p with name %s", mbox, name);
-    xbt_dict_set(mailboxes, mbox->name_, mbox, nullptr);
-  }
-  return mbox;
-}
-
 void SIMIX_mbox_free(void* data)
 {
   XBT_DEBUG("mbox free %p", data);
@@ -40,10 +22,9 @@ void SIMIX_mbox_free(void* data)
   delete mbox;
 }
 
-smx_mailbox_t SIMIX_mbox_get_by_name(const char* name)
-{
-  return static_cast<smx_mailbox_t>(xbt_dict_get_or_null(mailboxes, name));
-}
+/******************************************************************************/
+/*                           Rendez-Vous Points                               */
+/******************************************************************************/
 
 /**
  *  \brief set the receiver of the rendez vous point to allow eager sends
@@ -55,32 +36,50 @@ void SIMIX_mbox_set_receiver(smx_mailbox_t mbox, smx_actor_t process)
   mbox->permanent_receiver = process;
 }
 
-/**
- *  \brief Pushes a communication synchro into a rendez-vous point
- *  \param mbox The mailbox
- *  \param synchro The communication synchro
+namespace simgrid {
+namespace simix {
+/** @brief Returns the mailbox of that name, or nullptr */
+MailboxImpl* MailboxImpl::byNameOrNull(const char* name)
+{
+  return static_cast<smx_mailbox_t>(xbt_dict_get_or_null(mailboxes, name));
+}
+/** @brief Returns the mailbox of that name, newly created on need */
+MailboxImpl* MailboxImpl::byNameOrCreate(const char* name)
+{
+  xbt_assert(name, "Mailboxes must have a name");
+  /* two processes may have pushed the same mbox_create simcall at the same time */
+  smx_mailbox_t mbox = static_cast<smx_mailbox_t>(xbt_dict_get_or_null(mailboxes, name));
+  if (!mbox) {
+    mbox = new simgrid::simix::MailboxImpl(name);
+    XBT_DEBUG("Creating a mailbox at %p with name %s", mbox, name);
+    xbt_dict_set(mailboxes, mbox->name_, mbox, nullptr);
+  }
+  return mbox;
+}
+/** @brief Pushes a communication activity into a mailbox
+ *  @param activity What to add
  */
-void SIMIX_mbox_push(smx_mailbox_t mbox, smx_activity_t synchro)
+void MailboxImpl::push(smx_activity_t synchro)
 {
   simgrid::kernel::activity::Comm* comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
-  mbox->comm_queue.push_back(comm);
-  comm->mbox = mbox;
+  this->comm_queue.push_back(comm);
+  comm->mbox = this;
 }
 
-/**
- *  \brief Removes a communication synchro from a rendez-vous point
- *  \param mbox The rendez-vous point
- *  \param synchro The communication synchro
+/** @brief Removes a communication activity from a mailbox
+ *  @param activity What to remove
  */
-void SIMIX_mbox_remove(smx_mailbox_t mbox, smx_activity_t synchro)
+void MailboxImpl::remove(smx_activity_t activity)
 {
-  simgrid::kernel::activity::Comm* comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::Comm* comm = static_cast<simgrid::kernel::activity::Comm*>(activity);
 
   comm->mbox = nullptr;
-  for (auto it = mbox->comm_queue.begin(); it != mbox->comm_queue.end(); it++)
+  for (auto it = this->comm_queue.begin(); it != this->comm_queue.end(); it++)
     if (*it == comm) {
-      mbox->comm_queue.erase(it);
+      this->comm_queue.erase(it);
       return;
     }
-  xbt_die("Cannot remove the comm %p that is not part of the mailbox %s", comm, mbox->name_);
+  xbt_die("Cannot remove the comm %p that is not part of the mailbox %s", comm, this->name_);
+}
+}
 }