#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");
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);
}
*/
#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");
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.");
}
};
{
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.");
}
};
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);
}
#include "simgrid/s4u.hpp"
#include <cstdlib>
#include <iostream>
+#include <string>
XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_wait, "Messages specific for this s4u example");
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);
}
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);
}
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;
}
}
};
#include "simgrid/s4u.hpp"
#include <cstdlib>
#include <iostream>
+#include <string>
XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this s4u example");
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);
}
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);
}
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;
}
}
};
#include "simgrid/s4u.hpp"
#include <cstdlib>
#include <iostream>
+#include <string>
XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this msg example");
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);
}
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);
}
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;
}
}
};
/* 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"
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;
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;
}
};