diff options
| author | Daniel Micay <danielmicay@gmail.com> | 2013-10-15 00:37:32 -0400 |
|---|---|---|
| committer | Daniel Micay <danielmicay@gmail.com> | 2013-10-15 16:23:28 -0400 |
| commit | e1a26ad2713994ccba65d62ca64a2eb5db4eaf81 (patch) | |
| tree | f7727d6f22617258d6a5e05917defc459418af0c /src/libstd/rand | |
| parent | aa93381e1459c5e739fab400ce8f5f83c9466804 (diff) | |
| download | rust-e1a26ad2713994ccba65d62ca64a2eb5db4eaf81.tar.gz rust-e1a26ad2713994ccba65d62ca64a2eb5db4eaf81.zip | |
use element count in slices, not size in bytes
This allows the indexing bounds check or other comparisons against an element length to avoid a multiplication by the size.
Diffstat (limited to 'src/libstd/rand')
| -rw-r--r-- | src/libstd/rand/mod.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/libstd/rand/mod.rs b/src/libstd/rand/mod.rs index b800c7b03af..1e76effd0d2 100644 --- a/src/libstd/rand/mod.rs +++ b/src/libstd/rand/mod.rs @@ -52,6 +52,8 @@ fn main () { ``` */ +use sys::size_of; +use unstable::raw::Slice; use cast; use container::Container; use iter::{Iterator, range}; @@ -133,10 +135,10 @@ pub trait Rng { /// println!("{:?}", v); /// } /// ``` - fn fill_bytes(&mut self, mut dest: &mut [u8]) { - // this relies on the lengths being transferred correctly when - // transmuting between vectors like this. - let as_u64: &mut &mut [u64] = unsafe { cast::transmute(&mut dest) }; + fn fill_bytes(&mut self, dest: &mut [u8]) { + let mut slice: Slice<u64> = unsafe { cast::transmute_copy(&dest) }; + slice.len /= size_of::<u64>(); + let as_u64: &mut [u64] = unsafe { cast::transmute(slice) }; for dest in as_u64.mut_iter() { *dest = self.next_u64(); } @@ -147,7 +149,9 @@ pub trait Rng { // space for a u32 if remaining >= 4 { - let as_u32: &mut &mut [u32] = unsafe { cast::transmute(&mut dest) }; + let mut slice: Slice<u32> = unsafe { cast::transmute_copy(&dest) }; + slice.len /= size_of::<u32>(); + let as_u32: &mut [u32] = unsafe { cast::transmute(slice) }; as_u32[as_u32.len() - 1] = self.next_u32(); remaining -= 4; } |
