diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-04-07 10:34:54 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-04-07 10:34:54 -0700 |
| commit | 1d4c66b56beb7b2da6bafbab6871691641c8da0b (patch) | |
| tree | 9277fdf3c2b20afe5658dd7915f592a9cca5621e /std | |
| parent | 57688dea36e6d1f8d7bad255898d1e222b3a6fbc (diff) | |
| download | zig-1d4c66b56beb7b2da6bafbab6871691641c8da0b.tar.gz zig-1d4c66b56beb7b2da6bafbab6871691641c8da0b.zip | |
support multiple generic function instances
See #22
Diffstat (limited to 'std')
| -rw-r--r-- | std/rand.zig | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/std/rand.zig b/std/rand.zig index 5d2d547652..9dee46fbe5 100644 --- a/std/rand.zig +++ b/std/rand.zig @@ -1,11 +1,26 @@ // Mersenne Twister const ARRAY_SIZE = 624; -/// Use `rand_init` to initialize this state. +/// Use `init` to initialize this state. pub struct Rand { array: [ARRAY_SIZE]u32, index: isize, + /// Initialize random state with the given seed. + pub fn init(seed: u32) -> Rand { + var r: Rand = undefined; + r.index = 0; + r.array[0] = seed; + var i : isize = 1; + var prev_value: u64 = seed; + while (i < ARRAY_SIZE) { + r.array[i] = u32((prev_value ^ (prev_value << 30)) * 0x6c078965 + u32(i)); + prev_value = r.array[i]; + i += 1; + } + return r; + } + /// Get 32 bits of randomness. pub fn get_u32(r: &Rand) -> u32 { if (r.index == 0) { @@ -85,20 +100,6 @@ pub struct Rand { return bytes_left; } - /// Initialize random state with the given seed. - pub fn init(seed: u32) -> Rand { - var r: Rand = undefined; - r.index = 0; - r.array[0] = seed; - var i : isize = 1; - var prev_value: u64 = seed; - while (i < ARRAY_SIZE) { - r.array[i] = u32((prev_value ^ (prev_value << 30)) * 0x6c078965 + u32(i)); - prev_value = r.array[i]; - i += 1; - } - return r; - } } #attribute("test") |
