X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9cca09ad88fcaeb49f2637de97df519c3920aaa4..5089a0a98b27f5eeee62321dff4f025f1648f025:/examples/s4u/dht-chord/s4u-dht-chord.hpp diff --git a/examples/s4u/dht-chord/s4u-dht-chord.hpp b/examples/s4u/dht-chord/s4u-dht-chord.hpp index ff05252d82..eea1f2f41a 100644 --- a/examples/s4u/dht-chord/s4u-dht-chord.hpp +++ b/examples/s4u/dht-chord/s4u-dht-chord.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2016-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2016-2019. The SimGrid Team. All rights reserved. */ /* 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. */ @@ -7,39 +7,19 @@ #define S4U_CHORD_HPP #include "simgrid/s4u.hpp" #include -#include -#include +#include #include -#define MAX_SIMULATION_TIME 1000 -#define PERIODIC_STABILIZE_DELAY 20 -#define PERIODIC_FIX_FINGERS_DELAY 120 -#define PERIODIC_CHECK_PREDECESSOR_DELAY 120 -#define PERIODIC_LOOKUP_DELAY 10 -#define SLEEP_DELAY 4.9999 +constexpr double MAX_SIMULATION_TIME = 1000; +constexpr double PERIODIC_STABILIZE_DELAY = 20; +constexpr double PERIODIC_FIX_FINGERS_DELAY = 120; +constexpr double PERIODIC_CHECK_PREDECESSOR_DELAY = 120; +constexpr double PERIODIC_LOOKUP_DELAY = 10; +constexpr double SLEEP_DELAY = 4.9999; extern int nb_bits; extern int nb_keys; extern int timeout; -extern int* powers2; - -class HostChord { - RngStream stream_; - simgrid::s4u::Host* host = nullptr; - -public: - static simgrid::xbt::Extension EXTENSION_ID; - - explicit HostChord(simgrid::s4u::Host* ptr) : host(ptr) - { - std::string descr = std::string("RngSream<") + host->getCname() + ">"; - stream_ = RngStream_CreateStream(descr.c_str()); - } - - ~HostChord() { RngStream_DeleteStream(&stream_); }; - - RngStream getStream() { return stream_; }; -}; /* Types of tasks exchanged between nodes. */ enum e_message_type_t { @@ -61,15 +41,13 @@ public: 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::MailboxPtr answer_to; // mailbox to send an answer to (if any) + 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::getHost()->getName()) + : type(type), issuer_host_name(simgrid::s4u::this_actor::get_host()->get_name()) { } - ~ChordMessage() = default; - static void destroy(void* message); }; @@ -80,15 +58,14 @@ class Node { bool joined = false; int id_; // my id int pred_id_ = -1; // predecessor id - simgrid::s4u::MailboxPtr mailbox_; // my mailbox - int* fingers_; // finger table,(fingers[0] is my successor) + simgrid::s4u::Mailbox* mailbox_; // my mailbox + std::vector 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 args); Node(const Node&) = delete; - ~Node(); + Node& operator=(const Node&) = delete; void join(int known_id); void leave(); void notifyAndQuit(); @@ -124,7 +101,7 @@ public: if (not joined) return; void* data = nullptr; - double now = simgrid::s4u::Engine::getClock(); + double now = simgrid::s4u::Engine::get_clock(); double next_stabilize_date = start_time_ + PERIODIC_STABILIZE_DELAY; double next_fix_fingers_date = start_time_ + PERIODIC_FIX_FINGERS_DELAY; double next_check_predecessor_date = start_time_ + PERIODIC_CHECK_PREDECESSOR_DELAY; @@ -137,21 +114,21 @@ public: // no task was received: make some periodic calls if (now >= next_stabilize_date) { stabilize(); - next_stabilize_date = simgrid::s4u::Engine::getClock() + PERIODIC_STABILIZE_DELAY; + next_stabilize_date = simgrid::s4u::Engine::get_clock() + PERIODIC_STABILIZE_DELAY; } else if (now >= next_fix_fingers_date) { fixFingers(); - next_fix_fingers_date = simgrid::s4u::Engine::getClock() + PERIODIC_FIX_FINGERS_DELAY; + next_fix_fingers_date = simgrid::s4u::Engine::get_clock() + PERIODIC_FIX_FINGERS_DELAY; } else if (now >= next_check_predecessor_date) { checkPredecessor(); - next_check_predecessor_date = simgrid::s4u::Engine::getClock() + PERIODIC_CHECK_PREDECESSOR_DELAY; + next_check_predecessor_date = simgrid::s4u::Engine::get_clock() + PERIODIC_CHECK_PREDECESSOR_DELAY; } else if (now >= next_lookup_date) { randomLookup(); - next_lookup_date = simgrid::s4u::Engine::getClock() + PERIODIC_LOOKUP_DELAY; + next_lookup_date = simgrid::s4u::Engine::get_clock() + PERIODIC_LOOKUP_DELAY; } else { // nothing to do: sleep for a while simgrid::s4u::this_actor::sleep_for(SLEEP_DELAY); } - now = simgrid::s4u::Engine::getClock(); + now = simgrid::s4u::Engine::get_clock(); } if (data != nullptr) { @@ -160,7 +137,7 @@ public: comm_receive = nullptr; data = nullptr; } - now = simgrid::s4u::Engine::getClock(); + now = simgrid::s4u::Engine::get_clock(); } if (comm_receive != nullptr) { if (comm_receive->test())