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_  |