| ... | ... | @@ -34,9 +34,9 @@ pub struct Rand { |
| 34 | 34 | if (T == usize) { |
| 35 | 35 | return r.rng.get(); |
| 36 | 36 | } else { |
| 37 | | var result: T = undefined; |
| 38 | | r.fill_bytes(([]u8)((&result)[0...@sizeof(T)])); |
| 39 | | return result; |
| 37 | var result: [@sizeof(T)]u8 = undefined; |
| 38 | r.fill_bytes(result); |
| 39 | return ([]T)(result)[0]; |
| 40 | 40 | } |
| 41 | 41 | } |
| 42 | 42 | |
| ... | ... | @@ -44,12 +44,12 @@ pub struct Rand { |
| 44 | 44 | pub fn fill_bytes(r: &Rand, buf: []u8) { |
| 45 | 45 | var bytes_left = buf.len; |
| 46 | 46 | while (bytes_left >= @sizeof(usize)) { |
| 47 | | *((&usize)(&buf[buf.len - bytes_left])) = r.scalar(usize); |
| 47 | ([]usize)(buf[buf.len - bytes_left...])[0] = r.rng.get(); |
| 48 | 48 | bytes_left -= @sizeof(usize); |
| 49 | 49 | } |
| 50 | 50 | if (bytes_left > 0) { |
| 51 | 51 | var rand_val_array : [@sizeof(usize)]u8 = undefined; |
| 52 | | ([]usize)(rand_val_array)[0] = r.scalar(usize); |
| 52 | ([]usize)(rand_val_array)[0] = r.rng.get(); |
| 53 | 53 | while (bytes_left > 0) { |
| 54 | 54 | buf[buf.len - bytes_left] = rand_val_array[@sizeof(usize) - bytes_left]; |
| 55 | 55 | bytes_left -= 1; |
| ... | ... | @@ -107,10 +107,8 @@ struct MersenneTwister( |
| 107 | 107 | // TODO improve compile time eval code and then allow this function to be executed at compile time. |
| 108 | 108 | #static_eval_enable(false) |
| 109 | 109 | pub fn init(seed: int) -> Self { |
| 110 | | var mt = Self { |
| 111 | | .index = n, |
| 112 | | .array = undefined, |
| 113 | | }; |
| 110 | var mt: Self = undefined; |
| 111 | mt.index = n; |
| 114 | 112 | |
| 115 | 113 | var prev_value = seed; |
| 116 | 114 | mt.array[0] = prev_value; |