MCPcopy Create free account
hub / github.com/apache/brpc / fast_rand_in_64

Function fast_rand_in_64

src/butil/fast_rand.cpp:110–139  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

108}
109
110int64_t fast_rand_in_64(int64_t min, int64_t max) {
111 if (need_init(_tls_seed)) {
112 init_fast_rand_seed(&_tls_seed);
113 }
114 if (BAIDU_UNLIKELY(min >= max)) {
115 if (min == max) {
116 return min;
117 }
118 std::swap(min, max);
119 }
120 uint64_t range;
121 if (min >= 0) {
122 // Always safe to do subtraction.
123 range = (uint64_t)(max - min) + 1;
124 return min + (int64_t)fast_rand_impl(range, &_tls_seed);
125 }
126
127 uint64_t abs_min = safe_abs(min);
128 if (max >= 0) {
129 range = abs_min + (uint64_t)(max) + 1;
130 } else {
131 range = abs_min - safe_abs(max) + 1;
132 }
133 if (range == 0) {
134 // max = INT64_MAX, min = INT64_MIN
135 return (int64_t)xorshift128_next(&_tls_seed);
136 }
137 uint64_t r = fast_rand_impl(range, &_tls_seed);
138 return r >= abs_min ? (int64_t)(r - abs_min) : -((int64_t)(abs_min - r));
139}
140
141uint64_t fast_rand_in_u64(uint64_t min, uint64_t max) {
142 if (need_init(_tls_seed)) {

Callers 1

fast_rand_inFunction · 0.85

Calls 6

need_initFunction · 0.85
init_fast_rand_seedFunction · 0.85
fast_rand_implFunction · 0.85
safe_absFunction · 0.85
xorshift128_nextFunction · 0.85
swapFunction · 0.70

Tested by

no test coverage detected