17#include <linux/limits.h>
37 return absl::uniform_int_distribution<uint32_t>(0,
kuint32max)(generator_);
43 return absl::uniform_int_distribution<uint64_t>(0,
kuint64max)(generator_);
47 return val_max == 0 ? 0 :
Next64() % val_max;
51static inline uint32_t Word32At(
const char* ptr) {
52 return ((
static_cast<uint32_t
>(ptr[0])) +
53 (
static_cast<uint32_t
>(ptr[1]) << 8) +
54 (
static_cast<uint32_t
>(ptr[2]) << 16) +
55 (
static_cast<uint32_t
>(ptr[3]) << 24));
60 char name[PATH_MAX + 20];
61 assert(
sizeof(
name) - PATH_MAX >
sizeof(uint32_t) * 3);
63 if (gethostname(
name, PATH_MAX) != 0) {
64 strcpy(
name,
"default-hostname");
66 const int namelen = strlen(
name);
67 for (
size_t i = 0; i <
sizeof(uint32_t) * 3; ++i) {
68 name[namelen + i] =
'\0';
71 uint32_t
a = getpid();
73 gettimeofday(&tv, NULL);
74 uint32_t
b =
static_cast<uint32_t
>((tv.tv_sec + tv.tv_usec) & 0xffffffff);
75#elif defined(_MSC_VER)
76 uint32_t
a = GetCurrentProcessId();
77 uint32_t
b = GetTickCount();
82 for (
int i = 0; i < namelen; i +=
sizeof(uint32_t) * 3) {
83 a += Word32At(
name + i);
84 b += Word32At(
name + i +
sizeof(uint32_t));
85 c += Word32At(
name + i +
sizeof(uint32_t) +
sizeof(uint32_t));
90 return static_cast<int32_t
>(c);
static int32_t HostnamePidTimeSeed()
static int32_t DeterministicSeed()
uint32_t Uniform(uint32_t n)
static const uint64_t kuint64max
static const uint32_t kuint32max
Collection of objects used to extend the Constraint Solver library.
static void mix(uint32_t &a, uint32_t &b, uint32_t &c)