Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
The bittorrent example now uses the new module
authorYann Duplouy <yann.duplouy@inria.fr>
Mon, 21 Oct 2019 09:15:18 +0000 (11:15 +0200)
committerYann Duplouy <yann.duplouy@inria.fr>
Mon, 21 Oct 2019 09:15:18 +0000 (11:15 +0200)
examples/s4u/app-bittorrent/s4u-bittorrent.cpp
examples/s4u/app-bittorrent/s4u-bittorrent.hpp
examples/s4u/app-bittorrent/s4u-peer.cpp
examples/s4u/app-bittorrent/s4u-tracker.cpp

index 899802c..47ecad6 100644 (file)
@@ -8,8 +8,6 @@
 #include "s4u-peer.hpp"
 #include "s4u-tracker.hpp"
 
-std::default_random_engine generator;
-
 int main(int argc, char* argv[])
 {
   simgrid::s4u::Engine e(&argc, argv);
index 06fabfa..126017a 100644 (file)
@@ -7,8 +7,8 @@
 #ifndef BITTORRENT_BITTORRENT_HPP_
 #define BITTORRENT_BITTORRENT_HPP_
 
-#include <random>
 #include <simgrid/s4u.hpp>
+#include <xbt/random.hpp>
 
 constexpr char TRACKER_MAILBOX[] = "tracker_mailbox";
 /** Max number of peers sent by the tracker to clients */
@@ -77,6 +77,4 @@ public:
       : type(type), peer_id(peer_id), return_mailbox(return_mailbox), piece(piece){};
 };
 
-extern std::default_random_engine generator;
-
 #endif /* BITTORRENT_BITTORRENT_HPP_ */
index 360bb20..e335d11 100644 (file)
@@ -454,8 +454,7 @@ int Peer::selectPieceToDownload(Connection* remote_peer)
 
     xbt_assert(nb_interesting_pieces != 0);
     // get a random interesting piece
-    std::uniform_int_distribution<int> dist(0, nb_interesting_pieces - 1);
-    int random_piece_index = dist(generator);
+    int random_piece_index = simgrid::xbt::random::uniform_int(0, nb_interesting_pieces - 1);
     int current_index      = 0;
     for (unsigned int i = 0; i < FILE_PIECES; i++) {
       if (hasNotPiece(i) && remote_peer->hasPiece(i)) {
@@ -478,8 +477,7 @@ int Peer::selectPieceToDownload(Connection* remote_peer)
         nb_interesting_pieces++;
     xbt_assert(nb_interesting_pieces != 0);
     // get a random interesting piece
-    std::uniform_int_distribution<int> dist(0, nb_interesting_pieces - 1);
-    int random_piece_index = dist(generator);
+    int random_piece_index = simgrid::xbt::random::uniform_int(0, nb_interesting_pieces - 1);
     int current_index      = 0;
     for (unsigned int i = 0; i < FILE_PIECES; i++) {
       if (hasNotPiece(i) && remote_peer->hasPiece(i) && isNotDownloadingPiece(i)) {
@@ -512,8 +510,7 @@ int Peer::selectPieceToDownload(Connection* remote_peer)
     // get a random rarest piece
     int random_rarest_index = 0;
     if (nb_min_pieces > 0) {
-      std::uniform_int_distribution<int> dist(0, nb_min_pieces - 1);
-      random_rarest_index = dist(generator);
+      random_rarest_index = simgrid::xbt::random::uniform_int(0, nb_min_pieces - 1);
     }
     for (unsigned int i = 0; i < FILE_PIECES; i++)
       if (pieces_count[i] == min && hasNotPiece(i) && remote_peer->hasPiece(i) && isNotDownloadingPiece(i)) {
@@ -563,8 +560,7 @@ void Peer::updateChokedPeers()
       do {
         // We choose a random peer to unchoke.
         std::unordered_map<int, Connection>::iterator chosen_peer_it = connected_peers.begin();
-        std::uniform_int_distribution<int> dist(0, connected_peers.size() - 1);
-        std::advance(chosen_peer_it, dist(generator));
+        std::advance(chosen_peer_it, simgrid::xbt::random::uniform_int(0, connected_peers.size() - 1));
         chosen_peer = &chosen_peer_it->second;
         if (not chosen_peer->interested || not chosen_peer->choked_upload)
           chosen_peer = nullptr;
index 390020a..c4bfc16 100644 (file)
@@ -52,8 +52,7 @@ void Tracker::operator()()
       while (tried < max_tries) {
         do {
           next_peer = known_peers.begin();
-          std::uniform_int_distribution<int> dist(0, nb_known_peers - 1);
-          std::advance(next_peer, dist(generator));
+          std::advance(next_peer, simgrid::xbt::random::uniform_int(0, nb_known_peers - 1));
         } while (ta->getPeers().find(*next_peer) != ta->getPeers().end());
         ta->addPeer(*next_peer);
         tried++;