From ae51349344ca97f140af566598664159d29dca0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Fri, 8 Dec 2023 13:38:52 -0500
Subject: [PATCH] manager: add function to derive random engines from the main
 one

Seeding a random engine from other ones is a common practice that
reduce resource consumption.

Change-Id: I2e692fc2d5caec456c86134cf7d15f4da5017997
---
 src/manager.cpp | 10 ++++++++++
 src/manager.h   |  2 ++
 2 files changed, 12 insertions(+)

diff --git a/src/manager.cpp b/src/manager.cpp
index 4e5bce6f81..54722f24bc 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -2771,6 +2771,16 @@ Manager::setAccountDetails(const std::string& accountID,
     });
 }
 
+std::mt19937_64
+Manager::getSeededRandomEngine()
+{
+    std::array<std::mt19937_64::result_type, std::mt19937_64::state_size> sub_seeds;
+    for (auto& sub_seed : sub_seeds)
+        sub_seed = rand_();
+    std::seed_seq seed(sub_seeds.begin(), sub_seeds.end());
+    return std::mt19937_64(seed);
+}
+
 std::string
 Manager::getNewAccountId()
 {
diff --git a/src/manager.h b/src/manager.h
index a0e822d8f1..659697cd0c 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -442,6 +442,8 @@ public:
 
     void setAccountActive(const std::string& accountID, bool active, bool shutdownConnections);
 
+    std::mt19937_64 getSeededRandomEngine();
+
     /**
      * Return a new random accountid that is not present in the list
      * @return A brand new accountid
-- 
GitLab