1 //===- FuzzerRandom.h - Internal header for the Fuzzer ----------*- C++ -* ===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // fuzzer::Random 10 //===----------------------------------------------------------------------===// 11 12 #ifndef LLVM_FUZZER_RANDOM_H 13 #define LLVM_FUZZER_RANDOM_H 14 15 #include <random> 16 17 namespace fuzzer { 18 class Random { 19 public: Random(unsigned int seed)20 Random(unsigned int seed) : R(seed) {} Rand()21 size_t Rand() { return R(); } RandBool()22 size_t RandBool() { return Rand() % 2; } operator()23 size_t operator()(size_t n) { return n ? Rand() % n : 0; } operator()24 intptr_t operator()(intptr_t From, intptr_t To) { 25 assert(From < To); 26 intptr_t RangeSize = To - From + 1; 27 return operator()(RangeSize) + From; 28 } Get_mt19937()29 std::mt19937 &Get_mt19937() { return R; } 30 private: 31 std::mt19937 R; 32 }; 33 34 } // namespace fuzzer 35 36 #endif // LLVM_FUZZER_RANDOM_H 37