diff options
Diffstat (limited to 'runtime/utils.h')
| -rw-r--r-- | runtime/utils.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/runtime/utils.h b/runtime/utils.h index 3690f86a80..8b7941a1b2 100644 --- a/runtime/utils.h +++ b/runtime/utils.h @@ -18,9 +18,11 @@ #define ART_RUNTIME_UTILS_H_ #include <pthread.h> +#include <stdlib.h> #include <limits> #include <memory> +#include <random> #include <string> #include <type_traits> #include <vector> @@ -350,6 +352,26 @@ void ParseDouble(const std::string& option, double* parsed_value, UsageFn Usage); +#if defined(__BIONIC__) +struct Arc4RandomGenerator { + typedef uint32_t result_type; + static constexpr uint32_t min() { return std::numeric_limits<uint32_t>::min(); } + static constexpr uint32_t max() { return std::numeric_limits<uint32_t>::max(); } + uint32_t operator() () { return arc4random(); } +}; +using RNG = Arc4RandomGenerator; +#else +using RNG = std::random_device; +#endif + +template <typename T> +T GetRandomNumber(T min, T max) { + CHECK_LT(min, max); + std::uniform_int_distribution<T> dist(min, max); + RNG rng; + return dist(rng); +} + } // namespace art #endif // ART_RUNTIME_UTILS_H_ |