| Index: lib/Bitcode/NaCl/TestUtils/NaClRandNumGen.cpp
|
| diff --git a/lib/Bitcode/NaCl/TestUtils/NaClRandNumGen.cpp b/lib/Bitcode/NaCl/TestUtils/NaClRandNumGen.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5eb89d9fe7819abef6d9b7b375e82e5ce263f42c
|
| --- /dev/null
|
| +++ b/lib/Bitcode/NaCl/TestUtils/NaClRandNumGen.cpp
|
| @@ -0,0 +1,44 @@
|
| +//===- NaClRandNumGen.cpp - Random number generator -----------------------===//
|
| +//
|
| +// The LLVM Compiler Infrastructure
|
| +//
|
| +// This file is distributed under the University of Illinois Open Source
|
| +// License. See LICENSE.TXT for details.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +//
|
| +// This file provides a default implementation of a random number generator.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +
|
| +#include "llvm/Bitcode/NaCl/NaClRandNumGen.h"
|
| +
|
| +#include <vector>
|
| +#include <algorithm>
|
| +
|
| +namespace naclfuzz {
|
| +
|
| +// Put destructor in .cpp file guarantee vtable construction.
|
| +RandomNumberGenerator::~RandomNumberGenerator() {}
|
| +
|
| +DefaultRandomNumberGenerator::DefaultRandomNumberGenerator(llvm::StringRef Seed)
|
| + : Seed(Seed) {
|
| + saltSeed(0);
|
| +}
|
| +
|
| +uint64_t DefaultRandomNumberGenerator::operator()() {
|
| + return Generator();
|
| +}
|
| +
|
| +void DefaultRandomNumberGenerator::saltSeed(uint64_t Salt) {
|
| + // Combine seed and salt and pass to generator.
|
| + std::vector<uint32_t> Data;
|
| + Data.reserve(Seed.size() + 2);
|
| + Data.push_back(static_cast<uint32_t>(Salt));
|
| + Data.push_back(static_cast<uint32_t>(Salt >> 32));
|
| + std::copy(Seed.begin(), Seed.end(), Data.end());
|
| + std::seed_seq SeedSeq(Data.begin(), Data.end());
|
| + Generator.seed(SeedSeq);
|
| +}
|
| +
|
| +} // end of namespace naclfuzz
|
|
|