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 : public std::mt19937 { 19 public: 20 Random(unsigned int seed) : std::mt19937(seed) {} 21 result_type operator()() { return this->std::mt19937::operator()(); } 22 size_t Rand() { return this->operator()(); } 23 size_t RandBool() { return Rand() % 2; } 24 size_t operator()(size_t n) { return n ? Rand() % n : 0; } 25 intptr_t operator()(intptr_t From, intptr_t To) { 26 assert(From < To); 27 intptr_t RangeSize = To - From + 1; 28 return operator()(RangeSize) + From; 29 } 30 }; 31 32 } // namespace fuzzer 33 34 #endif // LLVM_FUZZER_RANDOM_H 35