mirror of https://github.com/Genymobile/scrcpy
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
657 B
C
25 lines
657 B
C
#include "rand.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "tick.h"
|
|
|
|
void sc_rand_init(struct sc_rand *rand) {
|
|
sc_tick seed = sc_tick_now(); // microsecond precision
|
|
rand->xsubi[0] = (seed >> 32) & 0xFFFF;
|
|
rand->xsubi[1] = (seed >> 16) & 0xFFFF;
|
|
rand->xsubi[2] = seed & 0xFFFF;
|
|
}
|
|
|
|
uint32_t sc_rand_u32(struct sc_rand *rand) {
|
|
// jrand returns a value in range [-2^31, 2^31]
|
|
// conversion from signed to unsigned is well-defined to wrap-around
|
|
return jrand48(rand->xsubi);
|
|
}
|
|
|
|
uint64_t sc_rand_u64(struct sc_rand *rand) {
|
|
uint32_t msb = sc_rand_u32(rand);
|
|
uint32_t lsb = sc_rand_u32(rand);
|
|
return ((uint64_t) msb << 32) | lsb;
|
|
}
|