From b1894c26788f6dbd49098eb00f86e79d6539ba60 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 11 Oct 2017 14:38:13 +0200 Subject: [PATCH] Use std::string in s4u examples. --- .../s4u/actions-comm/s4u-actions-comm.cpp | 5 ++-- .../s4u/actor-create/s4u-actor-create.cpp | 13 +++++----- .../s4u/app-token-ring/s4u-app-token-ring.cpp | 12 ++++----- examples/s4u/async-wait/s4u-async-wait.cpp | 26 +++++++++---------- .../s4u/async-waitall/s4u-async-waitall.cpp | 26 +++++++++---------- .../s4u/async-waitany/s4u-async-waitany.cpp | 26 +++++++++---------- examples/s4u/io/s4u-io.cpp | 16 +++++++----- 7 files changed, 61 insertions(+), 63 deletions(-) diff --git a/examples/s4u/actions-comm/s4u-actions-comm.cpp b/examples/s4u/actions-comm/s4u-actions-comm.cpp index f620071304..0be93a2963 100644 --- a/examples/s4u/actions-comm/s4u-actions-comm.cpp +++ b/examples/s4u/actions-comm/s4u-actions-comm.cpp @@ -6,6 +6,7 @@ #include "simgrid/s4u.hpp" #include "xbt/replay.hpp" #include "xbt/str.h" +#include 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); } diff --git a/examples/s4u/actor-create/s4u-actor-create.cpp b/examples/s4u/actor-create/s4u-actor-create.cpp index 33ed245dac..d83d75ac11 100644 --- a/examples/s4u/actor-create/s4u-actor-create.cpp +++ b/examples/s4u/actor-create/s4u-actor-create.cpp @@ -18,6 +18,7 @@ */ #include +#include // 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(mailbox->get()); - char* msg2 = static_cast(mailbox->get()); - XBT_INFO("I received '%s' and '%s'", msg1, msg2); - xbt_free(msg1); - xbt_free(msg2); + std::string* msg1 = static_cast(mailbox->get()); + std::string* msg2 = static_cast(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."); } }; diff --git a/examples/s4u/app-token-ring/s4u-app-token-ring.cpp b/examples/s4u/app-token-ring/s4u-app-token-ring.cpp index 7f242e4eab..51d44f46ac 100644 --- a/examples/s4u/app-token-ring/s4u-app-token-ring.cpp +++ b/examples/s4u/app-token-ring/s4u-app-token-ring.cpp @@ -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(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(my_mailbox->get()); + XBT_INFO("Host \"%u\" received \"%s\"", rank, res->c_str()); } else { - char* res = static_cast(my_mailbox->get()); - XBT_INFO("Host \"%u\" received \"%s\"", rank, res); + std::string* res = static_cast(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); } diff --git a/examples/s4u/async-wait/s4u-async-wait.cpp b/examples/s4u/async-wait/s4u-async-wait.cpp index 7742ccaabc..d712f92e8b 100644 --- a/examples/s4u/async-wait/s4u-async-wait.cpp +++ b/examples/s4u/async-wait/s4u-async-wait.cpp @@ -14,6 +14,7 @@ #include "simgrid/s4u.hpp" #include #include +#include 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(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(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; } } }; diff --git a/examples/s4u/async-waitall/s4u-async-waitall.cpp b/examples/s4u/async-waitall/s4u-async-waitall.cpp index 270894fe6e..98ca116ac5 100644 --- a/examples/s4u/async-waitall/s4u-async-waitall.cpp +++ b/examples/s4u/async-waitall/s4u-async-waitall.cpp @@ -15,6 +15,7 @@ #include "simgrid/s4u.hpp" #include #include +#include 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(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(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; } } }; diff --git a/examples/s4u/async-waitany/s4u-async-waitany.cpp b/examples/s4u/async-waitany/s4u-async-waitany.cpp index d94b036523..0f3bec8c42 100644 --- a/examples/s4u/async-waitany/s4u-async-waitany.cpp +++ b/examples/s4u/async-waitany/s4u-async-waitany.cpp @@ -20,6 +20,7 @@ #include "simgrid/s4u.hpp" #include #include +#include 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(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(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; } } }; diff --git a/examples/s4u/io/s4u-io.cpp b/examples/s4u/io/s4u-io.cpp index fb4bc28113..bcade6d748 100644 --- a/examples/s4u/io/s4u-io.cpp +++ b/examples/s4u/io/s4u-io.cpp @@ -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 #include #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(file->getUserdata())); - xbt_free(file->getUserdata()); + file->setUserdata(new std::string("777")); + std::string* file_data = static_cast(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(storage->getUserdata())); - storage->setUserdata(xbt_strdup("Some user data")); - XBT_INFO(" Set and get data: '%s'", static_cast(storage->getUserdata())); - - xbt_free(storage->getUserdata()); + storage->setUserdata(new std::string("Some user data")); + std::string* storage_data = static_cast(storage->getUserdata()); + XBT_INFO(" Set and get data: '%s'", storage_data->c_str()); + delete storage_data; } }; -- 2.20.1