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