mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Merge pull request #5581 from Xotchkass/rand-cleanup
Cleanup in `math/rand` and `runtime/random_generator`
This commit is contained in:
@@ -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
@@ -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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user