mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-10 10:52:31 -05:00
Add templated GetRandomDuration<>
This commit is contained in:
parent
af2ec6b037
commit
fa0e5b89cf
2 changed files with 16 additions and 16 deletions
|
@ -14,16 +14,14 @@
|
||||||
#include <wincrypt.h>
|
#include <wincrypt.h>
|
||||||
#endif
|
#endif
|
||||||
#include <logging.h> // for LogPrintf()
|
#include <logging.h> // for LogPrintf()
|
||||||
|
#include <randomenv.h>
|
||||||
|
#include <support/allocators/secure.h>
|
||||||
#include <sync.h> // for Mutex
|
#include <sync.h> // for Mutex
|
||||||
#include <util/time.h> // for GetTimeMicros()
|
#include <util/time.h> // for GetTimeMicros()
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include <randomenv.h>
|
|
||||||
|
|
||||||
#include <support/allocators/secure.h>
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
@ -587,16 +585,6 @@ uint64_t GetRand(uint64_t nMax) noexcept
|
||||||
return FastRandomContext(g_mock_deterministic_tests).randrange(nMax);
|
return FastRandomContext(g_mock_deterministic_tests).randrange(nMax);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::microseconds GetRandMicros(std::chrono::microseconds duration_max) noexcept
|
|
||||||
{
|
|
||||||
return std::chrono::microseconds{GetRand(duration_max.count())};
|
|
||||||
}
|
|
||||||
|
|
||||||
std::chrono::milliseconds GetRandMillis(std::chrono::milliseconds duration_max) noexcept
|
|
||||||
{
|
|
||||||
return std::chrono::milliseconds{GetRand(duration_max.count())};
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetRandInt(int nMax) noexcept
|
int GetRandInt(int nMax) noexcept
|
||||||
{
|
{
|
||||||
return GetRand(nMax);
|
return GetRand(nMax);
|
||||||
|
|
16
src/random.h
16
src/random.h
|
@ -67,9 +67,21 @@
|
||||||
* Thread-safe.
|
* Thread-safe.
|
||||||
*/
|
*/
|
||||||
void GetRandBytes(unsigned char* buf, int num) noexcept;
|
void GetRandBytes(unsigned char* buf, int num) noexcept;
|
||||||
|
/** Generate a uniform random integer in the range [0..range). Precondition: range > 0 */
|
||||||
uint64_t GetRand(uint64_t nMax) noexcept;
|
uint64_t GetRand(uint64_t nMax) noexcept;
|
||||||
std::chrono::microseconds GetRandMicros(std::chrono::microseconds duration_max) noexcept;
|
/** Generate a uniform random duration in the range [0..max). Precondition: max.count() > 0 */
|
||||||
std::chrono::milliseconds GetRandMillis(std::chrono::milliseconds duration_max) noexcept;
|
template <typename D>
|
||||||
|
D GetRandomDuration(typename std::common_type<D>::type max) noexcept
|
||||||
|
// Having the compiler infer the template argument from the function argument
|
||||||
|
// is dangerous, because the desired return value generally has a different
|
||||||
|
// type than the function argument. So std::common_type is used to force the
|
||||||
|
// call site to specify the type of the return value.
|
||||||
|
{
|
||||||
|
assert(max.count() > 0);
|
||||||
|
return D{GetRand(max.count())};
|
||||||
|
};
|
||||||
|
constexpr auto GetRandMicros = GetRandomDuration<std::chrono::microseconds>;
|
||||||
|
constexpr auto GetRandMillis = GetRandomDuration<std::chrono::milliseconds>;
|
||||||
int GetRandInt(int nMax) noexcept;
|
int GetRandInt(int nMax) noexcept;
|
||||||
uint256 GetRandHash() noexcept;
|
uint256 GetRandHash() noexcept;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue