Home | History | Annotate | Line # | Download | only in fuzzer
      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