mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2025-01-20 09:21:11 +00:00
231e468e19
git-subtree-dir: erigon-lib git-subtree-mainline: 3c8cbda8098cc073a668b9e9b0aafe6c361f17da git-subtree-split: 93d9c9d9fe4bd8a49f7a98a6bce0f0da7094c7d3
33 lines
767 B
C++
33 lines
767 B
C++
#ifndef STARKWARE_UTILS_PRNG_H_
|
|
#define STARKWARE_UTILS_PRNG_H_
|
|
|
|
#include <limits>
|
|
#include <random>
|
|
|
|
namespace starkware {
|
|
|
|
class Prng {
|
|
public:
|
|
Prng() : mt_prng_(std::random_device()()) {}
|
|
|
|
/*
|
|
Returns a random integer in the range [lower_bound, upper_bound].
|
|
*/
|
|
uint64_t RandomUint64(uint64_t lower_bound, uint64_t upper_bound) {
|
|
return std::uniform_int_distribution<uint64_t>(lower_bound, upper_bound)(mt_prng_);
|
|
}
|
|
|
|
/*
|
|
Returns a random integer in the range [0, 2^64).
|
|
Note: This random number generator is NOT cryptographically secure.
|
|
*/
|
|
uint64_t RandomUint64() { return RandomUint64(0, std::numeric_limits<uint64_t>::max()); }
|
|
|
|
private:
|
|
std::mt19937 mt_prng_;
|
|
};
|
|
|
|
} // namespace starkware
|
|
|
|
#endif // STARKWARE_UTILS_PRNG_H_
|