Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
smpi: fix issue with message IDs. In case of persistent request reused multiple times...
[simgrid.git] / examples / cpp / dht-chord / s4u-dht-chord.hpp
index 50ef4fdefed41f2f1313b38120e9633a62fec493..ab93cbff06fa1473edd7084c042334603d08436c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016-2022. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2016-2023. 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. */
@@ -8,7 +8,8 @@
 #include "simgrid/s4u.hpp"
 #include <string>
 #include <xbt/random.hpp>
-#include <xbt/str.h>
+
+namespace sg4 = simgrid::s4u;
 
 constexpr double MAX_SIMULATION_TIME              = 1000;
 constexpr double PERIODIC_STABILIZE_DELAY         = 20;
@@ -17,10 +18,6 @@ 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;
-
 /* Types of tasks exchanged between nodes. */
 enum class MessageType {
   FIND_SUCCESSOR,
@@ -37,11 +34,11 @@ enum class MessageType {
 class ChordMessage {
 public:
   MessageType type;                                                                    // type of message
-  std::string issuer_host_name     = simgrid::s4u::this_actor::get_host()->get_name(); // used for logging
+  std::string issuer_host_name = sg4::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)
+  sg4::Mailbox* answer_to      = nullptr;       // mailbox to send an answer to (if any)
 
   explicit ChordMessage(MessageType type) : type(type) {}
 
@@ -49,18 +46,26 @@ public:
 };
 
 class Node {
+  inline static int nb_bits_;
+  inline static int nb_keys_;
+  inline static int timeout_;
+
   int known_id_      = -1;
   double start_time_ = -1;
   double deadline_   = -1;
-  bool joined        = false;
+  bool joined_       = false;
   int id_;                           // my id
   int pred_id_ = -1;                 // predecessor id
-  simgrid::xbt::random::XbtRandom random; // random number generator for this node
-  simgrid::s4u::Mailbox* mailbox_;   // my mailbox
+  simgrid::xbt::random::XbtRandom random_; // random number generator for this node
+  sg4::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()
+  int next_finger_to_fix_;           // index of the next finger to fix in fix_fingers()
+
+  static bool is_in_interval(int id, int start, int end);
 
 public:
+  static void set_parameters(int nb_bits, int nb_keys, int timeout);
+
   explicit Node(std::vector<std::string> args);
   Node(const Node&) = delete;
   Node& operator=(const Node&) = delete;