#define S4U_CHORD_HPP
#include "simgrid/s4u.hpp"
#include <string>
-#include <xbt/RngStream.h>
+#include <xbt/random.hpp>
#include <xbt/str.h>
constexpr double MAX_SIMULATION_TIME = 1000;
extern int nb_keys;
extern int timeout;
-class HostChord {
- std::unique_ptr<std::remove_pointer<RngStream>::type, std::function<void(RngStream)>> stream_ = {
- nullptr, [](RngStream stream) { RngStream_DeleteStream(&stream); }};
- simgrid::s4u::Host* host = nullptr;
-
-public:
- static simgrid::xbt::Extension<simgrid::s4u::Host, HostChord> EXTENSION_ID;
-
- explicit HostChord(simgrid::s4u::Host* ptr) : host(ptr)
- {
- std::string descr = std::string("RngSream<") + host->get_cname() + ">";
- stream_.reset(RngStream_CreateStream(descr.c_str()));
- }
- HostChord(const HostChord&) = delete;
- HostChord& operator=(const HostChord&) = delete;
-
- RngStream getStream() { return stream_.get(); };
-};
-
/* Types of tasks exchanged between nodes. */
enum e_message_type_t {
FIND_SUCCESSOR,
class ChordMessage {
public:
e_message_type_t type; // type of message
- std::string issuer_host_name; // used for logging
+ std::string issuer_host_name = simgrid::s4u::this_actor::get_host()->get_name(); // used for logging
int request_id = -1; // id (used by some types of messages)
int request_finger = 1; // finger parameter (used by some types of messages)
int answer_id = -1; // answer (used by some types of messages)
simgrid::s4u::Mailbox* answer_to = nullptr; // mailbox to send an answer to (if any)
- explicit ChordMessage(e_message_type_t type)
- : type(type), issuer_host_name(simgrid::s4u::this_actor::get_host()->get_name())
- {
- }
+ explicit ChordMessage(e_message_type_t type) : type(type) {}
static void destroy(void* message);
};
simgrid::s4u::Mailbox* mailbox_; // my mailbox
std::vector<int> fingers_; // finger table,(fingers[0] is my successor)
int next_finger_to_fix; // index of the next finger to fix in fix_fingers()
- RngStream stream;
public:
explicit Node(std::vector<std::string> args);