Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use std::unordered_map + save an indirection.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 13 Mar 2019 13:12:10 +0000 (14:12 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 13 Mar 2019 14:40:53 +0000 (15:40 +0100)
src/kernel/activity/MailboxImpl.cpp

index 9ead4ec..218fce7 100644 (file)
@@ -6,15 +6,17 @@
 #include "src/kernel/activity/MailboxImpl.hpp"
 #include "src/kernel/activity/CommImpl.hpp"
 
 #include "src/kernel/activity/MailboxImpl.hpp"
 #include "src/kernel/activity/CommImpl.hpp"
 
+#include <unordered_map>
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_mailbox, simix, "Mailbox implementation");
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_mailbox, simix, "Mailbox implementation");
 
-static std::map<std::string, smx_mailbox_t>* mailboxes = new std::map<std::string, smx_mailbox_t>;
+static std::unordered_map<std::string, smx_mailbox_t> mailboxes;
 
 void SIMIX_mailbox_exit()
 {
 
 void SIMIX_mailbox_exit()
 {
-  for (auto const& elm : *mailboxes)
+  for (auto const& elm : mailboxes)
     delete elm.second;
     delete elm.second;
-  delete mailboxes;
+  mailboxes.clear();
 }
 
 /******************************************************************************/
 }
 
 /******************************************************************************/
@@ -27,8 +29,8 @@ namespace activity {
 /** @brief Returns the mailbox of that name, or nullptr */
 MailboxImpl* MailboxImpl::by_name_or_null(const std::string& name)
 {
 /** @brief Returns the mailbox of that name, or nullptr */
 MailboxImpl* MailboxImpl::by_name_or_null(const std::string& name)
 {
-  auto mbox = mailboxes->find(name);
-  if (mbox != mailboxes->end())
+  auto mbox = mailboxes.find(name);
+  if (mbox != mailboxes.end())
     return mbox->second;
   else
     return nullptr;
     return mbox->second;
   else
     return nullptr;
@@ -38,11 +40,11 @@ MailboxImpl* MailboxImpl::by_name_or_null(const std::string& name)
 MailboxImpl* MailboxImpl::by_name_or_create(const std::string& name)
 {
   /* two processes may have pushed the same mbox_create simcall at the same time */
 MailboxImpl* MailboxImpl::by_name_or_create(const std::string& name)
 {
   /* two processes may have pushed the same mbox_create simcall at the same time */
-  auto m = mailboxes->find(name);
-  if (m == mailboxes->end()) {
+  auto m = mailboxes.find(name);
+  if (m == mailboxes.end()) {
     MailboxImpl* mbox = new MailboxImpl(name);
     XBT_DEBUG("Creating a mailbox at %p with name %s", mbox, name.c_str());
     MailboxImpl* mbox = new MailboxImpl(name);
     XBT_DEBUG("Creating a mailbox at %p with name %s", mbox, name.c_str());
-    (*mailboxes)[mbox->name_] = mbox;
+    mailboxes[name] = mbox;
     return mbox;
   } else
     return m->second;
     return mbox;
   } else
     return m->second;