| /* |
| * grandom.cc |
| * |
| * This file is licensed under the GPLv2 or later |
| * |
| * Pseudo-random number generation |
| * |
| * Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> |
| * Copyright (C) 2018 Adam Reichold <adam.reichold@t-online.de> |
| */ |
| |
| #include "grandom.h" |
| |
| #include <random> |
| |
| namespace |
| { |
| |
| auto& grandom_engine() |
| { |
| static thread_local std::default_random_engine engine{std::random_device{}()}; |
| return engine; |
| } |
| |
| } |
| |
| void grandom_fill(unsigned char *buff, int size) |
| { |
| auto& engine = grandom_engine(); |
| std::uniform_int_distribution<unsigned short> distribution{std::numeric_limits<unsigned char>::min(), std::numeric_limits<unsigned char>::max()}; |
| for (int index = 0; index < size; ++index) { |
| buff[index] = distribution(engine); |
| } |
| } |
| |
| double grandom_double() |
| { |
| auto& engine = grandom_engine(); |
| return std::generate_canonical<double, std::numeric_limits<double>::digits>(engine); |
| } |