OLD | NEW |
(Empty) | |
| 1 //===- NaClRandNumGen.cpp - Random number generator -----------------------===// |
| 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 // |
| 10 // This file provides a default implementation of a random number generator. |
| 11 // |
| 12 //===----------------------------------------------------------------------===// |
| 13 |
| 14 #include "llvm/Bitcode/NaCl/NaClRandNumGen.h" |
| 15 |
| 16 #include <vector> |
| 17 #include <algorithm> |
| 18 |
| 19 namespace naclfuzz { |
| 20 |
| 21 // Put destructor in .cpp file guarantee vtable construction. |
| 22 RandomNumberGenerator::~RandomNumberGenerator() {} |
| 23 |
| 24 DefaultRandomNumberGenerator::DefaultRandomNumberGenerator(llvm::StringRef Seed) |
| 25 : Seed(Seed) { |
| 26 saltSeed(0); |
| 27 } |
| 28 |
| 29 uint64_t DefaultRandomNumberGenerator::operator()() { |
| 30 return Generator(); |
| 31 } |
| 32 |
| 33 void DefaultRandomNumberGenerator::saltSeed(uint64_t Salt) { |
| 34 // Combine seed and salt and pass to generator. |
| 35 std::vector<uint32_t> Data; |
| 36 Data.reserve(Seed.size() + 2); |
| 37 Data.push_back(static_cast<uint32_t>(Salt)); |
| 38 Data.push_back(static_cast<uint32_t>(Salt >> 32)); |
| 39 std::copy(Seed.begin(), Seed.end(), Data.end()); |
| 40 std::seed_seq SeedSeq(Data.begin(), Data.end()); |
| 41 Generator.seed(SeedSeq); |
| 42 } |
| 43 |
| 44 } // end of namespace naclfuzz |
OLD | NEW |