Merge pull request #5581 from Xotchkass/rand-cleanup

Cleanup in `math/rand` and `runtime/random_generator`
This commit is contained in:
gingerBill
2025-08-15 12:12:17 +01:00
committed by GitHub
2 changed files with 19 additions and 32 deletions
+1 -1
View File
@@ -97,7 +97,7 @@ default_random_generator_proc :: proc(data: rawptr, mode: Random_Generator_Mode,
for &v in p { for &v in p {
if pos == 0 { if pos == 0 {
val = read_u64(r) val = read_u64(r)
pos = 7 pos = 8
} }
v = byte(val) v = byte(val)
val >>= 8 val >>= 8
+10 -23
View File
@@ -56,13 +56,6 @@ query_info :: proc(gen := context.random_generator) -> Generator_Query_Info {
} }
@(private)
_random_u64 :: proc(gen := context.random_generator) -> (res: u64) {
ok := runtime.random_generator_read_ptr(gen, &res, size_of(res))
assert(ok, "uninitialized gen/context.random_generator")
return
}
/* /*
Generates a random 32 bit value using the provided random number generator. If no generator is provided the global random number generator will be used. Generates a random 32 bit value using the provided random number generator. If no generator is provided the global random number generator will be used.
@@ -84,7 +77,7 @@ Possible Output:
*/ */
@(require_results) @(require_results)
uint32 :: proc(gen := context.random_generator) -> (val: u32) { return u32(_random_u64(gen)) } uint32 :: proc(gen := context.random_generator) -> (val: u32) {return u32(uint64(gen))}
/* /*
Generates a random 64 bit value using the provided random number generator. If no generator is provided the global random number generator will be used. Generates a random 64 bit value using the provided random number generator. If no generator is provided the global random number generator will be used.
@@ -107,7 +100,11 @@ Possible Output:
*/ */
@(require_results) @(require_results)
uint64 :: proc(gen := context.random_generator) -> (val: u64) { return _random_u64(gen) } uint64 :: proc(gen := context.random_generator) -> (val: u64) {
ok := runtime.random_generator_read_ptr(gen, &val, size_of(val))
assert(ok, "uninitialized gen/context.random_generator")
return
}
/* /*
Generates a random 128 bit value using the provided random number generator. If no generator is provided the global random number generator will be used. Generates a random 128 bit value using the provided random number generator. If no generator is provided the global random number generator will be used.
@@ -131,8 +128,8 @@ Possible Output:
*/ */
@(require_results) @(require_results)
uint128 :: proc(gen := context.random_generator) -> (val: u128) { uint128 :: proc(gen := context.random_generator) -> (val: u128) {
a := u128(_random_u64(gen)) a := u128(uint64(gen))
b := u128(_random_u64(gen)) b := u128(uint64(gen))
return (a<<64) | b return (a<<64) | b
} }
@@ -508,18 +505,8 @@ Possible Output:
*/ */
@(require_results) @(require_results)
read :: proc(p: []byte, gen := context.random_generator) -> (n: int) { read :: proc(p: []byte, gen := context.random_generator) -> (n: int) {
pos := i8(0) if !runtime.random_generator_read_bytes(gen, p) {return 0}
val := i64(0) return len(p)
for n = 0; n < len(p); n += 1 {
if pos == 0 {
val = int63(gen)
pos = 7
}
p[n] = byte(val)
val >>= 8
pos -= 1
}
return
} }
/* /*