Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use std::string in s4u examples.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 11 Oct 2017 12:38:13 +0000 (14:38 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 11 Oct 2017 21:02:40 +0000 (23:02 +0200)
examples/s4u/actions-comm/s4u-actions-comm.cpp
examples/s4u/actor-create/s4u-actor-create.cpp
examples/s4u/app-token-ring/s4u-app-token-ring.cpp
examples/s4u/async-wait/s4u-async-wait.cpp
examples/s4u/async-waitall/s4u-async-waitall.cpp
examples/s4u/async-waitany/s4u-async-waitany.cpp
examples/s4u/io/s4u-io.cpp

index f620071..0be93a2 100644 (file)
@@ -6,6 +6,7 @@
 #include "simgrid/s4u.hpp"
 #include "xbt/replay.hpp"
 #include "xbt/str.h"
+#include <string>
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(actions, "Messages specific for this msg example");
 
@@ -59,13 +60,13 @@ public:
   static void send(const char* const* action)
   {
     double size                 = std::stod(action[3]);
-    char* payload               = xbt_strdup(action[3]);
+    std::string* payload        = new std::string(action[3]);
     double clock                = simgrid::s4u::Engine::getClock();
     simgrid::s4u::MailboxPtr to = simgrid::s4u::Mailbox::byName(simgrid::s4u::this_actor::getName() + "_" + action[2]);
     ACT_DEBUG("Entering Send: %s (size: %g) -- Actor %s on mailbox %s", NAME, size,
               simgrid::s4u::this_actor::getName().c_str(), to->getName());
     to->put(payload, size);
-    xbt_free(payload);
+    delete payload;
 
     log_action(action, simgrid::s4u::Engine::getClock() - clock);
   }
index 33ed245..d83d75a 100644 (file)
@@ -18,6 +18,7 @@
  */
 
 #include <simgrid/s4u.hpp>
+#include <string>
 
 // This declares a logging channel so that XBT_INFO can be used later
 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_actor_create, "The logging channel used in this example");
@@ -42,7 +43,7 @@ public:
     XBT_INFO("Hello s4u, I have something to send");
     simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName("mb42");
 
-    mailbox->put(xbt_strdup(msg.c_str()), msg.size());
+    mailbox->put(new std::string(msg), msg.size());
     XBT_INFO("I'm done. See you.");
   }
 };
@@ -74,11 +75,11 @@ public:
   {
     XBT_INFO("Hello s4u, I'm ready to get any message you'd want on %s", mailbox->getName());
 
-    char* msg1 = static_cast<char*>(mailbox->get());
-    char* msg2 = static_cast<char*>(mailbox->get());
-    XBT_INFO("I received '%s' and '%s'", msg1, msg2);
-    xbt_free(msg1);
-    xbt_free(msg2);
+    std::string* msg1 = static_cast<std::string*>(mailbox->get());
+    std::string* msg2 = static_cast<std::string*>(mailbox->get());
+    XBT_INFO("I received '%s' and '%s'", msg1->c_str(), msg2->c_str());
+    delete msg1;
+    delete msg2;
     XBT_INFO("I'm done. See you.");
   }
 };
index 7f242e4..51d44f4 100644 (file)
@@ -39,13 +39,13 @@ public:
     if (rank == 0) {
       /* The root process (rank 0) first sends the token then waits to receive it back */
       XBT_INFO("Host \"%u\" send 'Token' to Host \"%s\"", rank, neighbor_mailbox->getName());
-      neighbor_mailbox->put(xbt_strdup("Token"), task_comm_size);
-      char* res = static_cast<char*>(my_mailbox->get());
-      XBT_INFO("Host \"%u\" received \"%s\"", rank, res);
-      xbt_free(res);
+      std::string msg = "Token";
+      neighbor_mailbox->put(&msg, task_comm_size);
+      std::string* res = static_cast<std::string*>(my_mailbox->get());
+      XBT_INFO("Host \"%u\" received \"%s\"", rank, res->c_str());
     } else {
-      char* res = static_cast<char*>(my_mailbox->get());
-      XBT_INFO("Host \"%u\" received \"%s\"", rank, res);
+      std::string* res = static_cast<std::string*>(my_mailbox->get());
+      XBT_INFO("Host \"%u\" received \"%s\"", rank, res->c_str());
       XBT_INFO("Host \"%u\" send 'Token' to Host \"%s\"", rank, neighbor_mailbox->getName());
       neighbor_mailbox->put(res, task_comm_size);
     }
index 7742cca..d712f92 100644 (file)
@@ -14,6 +14,7 @@
 #include "simgrid/s4u.hpp"
 #include <cstdlib>
 #include <iostream>
+#include <string>
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_wait, "Messages specific for this s4u example");
 
@@ -40,11 +41,11 @@ public:
       std::string mboxName          = std::string("receiver-") + std::to_string(i % receivers_count);
       simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
       std::string msgName = std::string("Message ") + std::to_string(i);
-      char* payload = xbt_strdup(msgName.c_str()); // copy the data we send: 'msgName' is not a stable storage location
-
+      std::string* payload          = new std::string(msgName); // copy the data we send:
+                                                                // 'msgName' is not a stable storage location
       XBT_INFO("Send '%s' to '%s'", msgName.c_str(), mboxName.c_str());
       /* Create a communication representing the ongoing communication */
-      simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, msg_size);
+      simgrid::s4u::CommPtr comm = mbox->put_async(payload, msg_size);
       /* Add this comm to the vector of all known comms */
       pending_comms.push_back(comm);
     }
@@ -53,9 +54,9 @@ public:
     for (int i = 0; i < receivers_count; i++) {
       std::string mboxName          = std::string("receiver-") + std::to_string(i % receivers_count);
       simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
-      char* payload                 = xbt_strdup("finalize"); // Make a copy of the data we will send
+      std::string* payload          = new std::string("finalize"); // Make a copy of the data we will send
 
-      simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, 0);
+      simgrid::s4u::CommPtr comm = mbox->put_async(payload, 0);
       pending_comms.push_back(comm);
       XBT_INFO("Send 'finalize' to 'receiver-%ld'", i % receivers_count);
     }
@@ -87,15 +88,12 @@ public:
   void operator()()
   {
     XBT_INFO("Wait for my first message");
-    while (1) {
-      char* received = static_cast<char*>(mbox->get());
-      XBT_INFO("I got a '%s'.", received);
-      if (std::strcmp(received, "finalize") == 0) { /* If it's a finalize message, we're done */
-        xbt_free(received);
-        break;
-      }
-      /* Otherwise receiving the message was all we were supposed to do */
-      xbt_free(received);
+    for (bool done = false; not done;) {
+      std::string* received = static_cast<std::string*>(mbox->get());
+      XBT_INFO("I got a '%s'.", received->c_str());
+      done = (*received == "finalize"); // If it's a finalize message, we're done
+      // Receiving the message was all we were supposed to do
+      delete received;
     }
   }
 };
index 270894f..98ca116 100644 (file)
@@ -15,6 +15,7 @@
 #include "simgrid/s4u.hpp"
 #include <cstdlib>
 #include <iostream>
+#include <string>
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this s4u example");
 
@@ -41,11 +42,11 @@ public:
       std::string mboxName          = std::string("receiver-") + std::to_string(i % receivers_count);
       simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
       std::string msgName           = std::string("Message ") + std::to_string(i);
-      char* payload = xbt_strdup(msgName.c_str()); // copy the data we send: 'msgName' is not a stable storage location
-
+      std::string* payload          = new std::string(msgName); // copy the data we send:
+                                                                // 'msgName' is not a stable storage location
       XBT_INFO("Send '%s' to '%s'", msgName.c_str(), mboxName.c_str());
       /* Create a communication representing the ongoing communication */
-      simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, msg_size);
+      simgrid::s4u::CommPtr comm = mbox->put_async(payload, msg_size);
       /* Add this comm to the vector of all known comms */
       pending_comms.push_back(comm);
     }
@@ -54,9 +55,9 @@ public:
     for (int i = 0; i < receivers_count; i++) {
       std::string mboxName          = std::string("receiver-") + std::to_string(i % receivers_count);
       simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
-      char* payload                 = xbt_strdup("finalize"); // Make a copy of the data we will send
+      std::string* payload          = new std::string("finalize"); // Make a copy of the data we will send
 
-      simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, 0);
+      simgrid::s4u::CommPtr comm = mbox->put_async(payload, 0);
       pending_comms.push_back(comm);
       XBT_INFO("Send 'finalize' to 'receiver-%ld'", i % receivers_count);
     }
@@ -83,15 +84,12 @@ public:
   void operator()()
   {
     XBT_INFO("Wait for my first message");
-    while (1) {
-      char* received = static_cast<char*>(mbox->get());
-      XBT_INFO("I got a '%s'.", received);
-      if (std::strcmp(received, "finalize") == 0) { /* If it's a finalize message, we're done */
-        xbt_free(received);
-        break;
-      }
-      /* Otherwise receiving the message was all we were supposed to do */
-      xbt_free(received);
+    for (bool done = false; not done;) {
+      std::string* received = static_cast<std::string*>(mbox->get());
+      XBT_INFO("I got a '%s'.", received->c_str());
+      done = (*received == "finalize"); // If it's a finalize message, we're done
+      // Receiving the message was all we were supposed to do
+      delete received;
     }
   }
 };
index d94b036..0f3bec8 100644 (file)
@@ -20,6 +20,7 @@
 #include "simgrid/s4u.hpp"
 #include <cstdlib>
 #include <iostream>
+#include <string>
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this msg example");
 
@@ -46,11 +47,11 @@ public:
       std::string mboxName          = std::string("receiver-") + std::to_string(i % receivers_count);
       simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
       std::string msgName           = std::string("Message ") + std::to_string(i);
-      char* payload = xbt_strdup(msgName.c_str()); // copy the data we send: 'msgName' is not a stable storage location
-
+      std::string* payload          = new std::string(msgName); // copy the data we send:
+                                                                // 'msgName' is not a stable storage location
       XBT_INFO("Send '%s' to '%s'", msgName.c_str(), mboxName.c_str());
       /* Create a communication representing the ongoing communication */
-      simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, msg_size);
+      simgrid::s4u::CommPtr comm = mbox->put_async(payload, msg_size);
       /* Add this comm to the vector of all known comms */
       pending_comms.push_back(comm);
     }
@@ -59,9 +60,9 @@ public:
     for (int i = 0; i < receivers_count; i++) {
       std::string mboxName          = std::string("receiver-") + std::to_string(i % receivers_count);
       simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName);
-      char* payload                 = xbt_strdup("finalize"); // Make a copy of the data we will send
+      std::string* payload          = new std::string("finalize"); // Make a copy of the data we will send
 
-      simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, 0);
+      simgrid::s4u::CommPtr comm = mbox->put_async(payload, 0);
       pending_comms.push_back(comm);
       XBT_INFO("Send 'finalize' to 'receiver-%ld'", i % receivers_count);
     }
@@ -99,15 +100,12 @@ public:
   void operator()()
   {
     XBT_INFO("Wait for my first message");
-    while (1) {
-      char* received = static_cast<char*>(mbox->get());
-      XBT_INFO("I got a '%s'.", received);
-      if (std::strcmp(received, "finalize") == 0) { /* If it's a finalize message, we're done */
-        xbt_free(received);
-        break;
-      }
-      /* Otherwise receiving the message was all we were supposed to do */
-      xbt_free(received);
+    for (bool done = false; not done;) {
+      std::string* received = static_cast<std::string*>(mbox->get());
+      XBT_INFO("I got a '%s'.", received->c_str());
+      done = (*received == "finalize"); // If it's a finalize message, we're done
+      // Receiving the message was all we were supposed to do
+      delete received;
     }
   }
 };
index fb4bc28..bcade6d 100644 (file)
@@ -3,6 +3,7 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <string>
 #include <unordered_map>
 
 #include "simgrid/s4u.hpp"
@@ -63,9 +64,10 @@ public:
     file->move(newpath);
 
     // Test attaching some user data to the file
-    file->setUserdata(xbt_strdup("777"));
-    XBT_INFO("User data attached to the file: %s", static_cast<char*>(file->getUserdata()));
-    xbt_free(file->getUserdata());
+    file->setUserdata(new std::string("777"));
+    std::string* file_data = static_cast<std::string*>(file->getUserdata());
+    XBT_INFO("User data attached to the file: %s", file_data->c_str());
+    delete file_data;
 
     // Close the file
     delete file;
@@ -74,10 +76,10 @@ public:
     XBT_INFO("Get/set data for storage element: %s", storage->getName());
     XBT_INFO("    Uninitialized storage data: '%s'", static_cast<char*>(storage->getUserdata()));
 
-    storage->setUserdata(xbt_strdup("Some user data"));
-    XBT_INFO("    Set and get data: '%s'", static_cast<char*>(storage->getUserdata()));
-
-    xbt_free(storage->getUserdata());
+    storage->setUserdata(new std::string("Some user data"));
+    std::string* storage_data = static_cast<std::string*>(storage->getUserdata());
+    XBT_INFO("    Set and get data: '%s'", storage_data->c_str());
+    delete storage_data;
   }
 };