remove constexpr from util/random.h for MSVC compat
Summary: Scoped anonymous enums seem to be better supported than static constexpr at the moment, so this diff replaces the latter with the former. Also, this diff removes an incorrect inclusion of pthread.h. MSVC build was broken starting with D50439. Test Plan: 1. build 2. observe proper skiplist behavior by absence of pathological slowdown 3. push diff to tmp_try_windows branch to tickle AppVeyor 4. wait for contbuild before committing to master Reviewers: sdong Reviewed By: sdong Subscribers: dhruba Differential Revision: https://reviews.facebook.net/D50517
This commit is contained in:
parent
b81b430987
commit
505accda38
@ -6,9 +6,10 @@
|
|||||||
|
|
||||||
#include "util/random.h"
|
#include "util/random.h"
|
||||||
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <thread>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "port/likely.h"
|
#include "port/likely.h"
|
||||||
#include "util/thread_local.h"
|
#include "util/thread_local.h"
|
||||||
@ -27,10 +28,8 @@ Random* Random::GetTLSInstance() {
|
|||||||
|
|
||||||
auto rv = tls_instance;
|
auto rv = tls_instance;
|
||||||
if (UNLIKELY(rv == nullptr)) {
|
if (UNLIKELY(rv == nullptr)) {
|
||||||
const pthread_t self = pthread_self();
|
size_t seed = std::hash<std::thread::id>()(std::this_thread::get_id());
|
||||||
uint32_t seed = 0;
|
rv = new (&tls_instance_bytes) Random((uint32_t)seed);
|
||||||
memcpy(&seed, &self, sizeof(seed));
|
|
||||||
rv = new (&tls_instance_bytes) Random(seed);
|
|
||||||
tls_instance = rv;
|
tls_instance = rv;
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -18,8 +18,12 @@ namespace rocksdb {
|
|||||||
// package.
|
// package.
|
||||||
class Random {
|
class Random {
|
||||||
private:
|
private:
|
||||||
static constexpr uint32_t M = 2147483647L; // 2^31-1
|
enum : uint32_t {
|
||||||
static constexpr uint64_t A = 16807; // bits 14, 8, 7, 5, 2, 1, 0
|
M = 2147483647L // 2^31-1
|
||||||
|
};
|
||||||
|
enum : uint64_t {
|
||||||
|
A = 16807 // bits 14, 8, 7, 5, 2, 1, 0
|
||||||
|
};
|
||||||
|
|
||||||
uint32_t seed_;
|
uint32_t seed_;
|
||||||
|
|
||||||
@ -27,7 +31,7 @@ class Random {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// This is the largest value that can be returned from Next()
|
// This is the largest value that can be returned from Next()
|
||||||
static constexpr uint32_t kMaxNext = M;
|
enum : uint32_t { kMaxNext = M };
|
||||||
|
|
||||||
explicit Random(uint32_t s) : seed_(GoodSeed(s)) {}
|
explicit Random(uint32_t s) : seed_(GoodSeed(s)) {}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user