A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
(partially) convert simix::MailboxImpl to C++
[simgrid.git]
/
src
/
simix
/
MailboxImpl.cpp
diff --git
a/src/simix/MailboxImpl.cpp
b/src/simix/MailboxImpl.cpp
index
c30d784
..
9936448
100644
(file)
--- a/
src/simix/MailboxImpl.cpp
+++ b/
src/simix/MailboxImpl.cpp
@@
-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_);
+}
+}
}