about summary refs log tree commit diff
path: root/src/libstd/rand/reader.rs
diff options
context:
space:
mode:
authorHuon Wilson <dbau.pp+github@gmail.com>2014-03-02 11:23:04 +1100
committerHuon Wilson <dbau.pp+github@gmail.com>2014-03-12 11:31:05 +1100
commit6fa4bbeed425ae99d15322fbaa05d1abeae6547f (patch)
tree17f9edde3db9c624e476ac2f6c585792ddb1890b /src/libstd/rand/reader.rs
parent74bfa7108a62c053fdeae2bb093f8035e19e2ef2 (diff)
downloadrust-6fa4bbeed425ae99d15322fbaa05d1abeae6547f.tar.gz
rust-6fa4bbeed425ae99d15322fbaa05d1abeae6547f.zip
std: Move rand to librand.
This functionality is not super-core and so doesn't need to be included
in std. It's possible that std may need rand (it does a little bit now,
for io::test) in which case the functionality required could be moved to
a secret hidden module and reexposed by librand.

Unfortunately, using #[deprecated] here is hard: there's too much to
mock to make it feasible, since we have to ensure that programs still
typecheck to reach the linting phase.
Diffstat (limited to 'src/libstd/rand/reader.rs')
-rw-r--r--src/libstd/rand/reader.rs124
1 files changed, 0 insertions, 124 deletions
diff --git a/src/libstd/rand/reader.rs b/src/libstd/rand/reader.rs
deleted file mode 100644
index 4c9a8f7f9a2..00000000000
--- a/src/libstd/rand/reader.rs
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! A wrapper around any Reader to treat it as an RNG.
-
-use container::Container;
-use result::{Ok, Err};
-use io::Reader;
-
-use rand::Rng;
-
-/// An RNG that reads random bytes straight from a `Reader`. This will
-/// work best with an infinite reader, but this is not required.
-///
-/// It will fail if it there is insufficient data to fulfill a request.
-///
-/// # Example
-///
-/// ```rust
-/// use std::rand::{reader, Rng};
-/// use std::io::MemReader;
-///
-/// let mut rng = reader::ReaderRng::new(MemReader::new(~[1,2,3,4,5,6,7,8]));
-/// println!("{:x}", rng.gen::<uint>());
-/// ```
-pub struct ReaderRng<R> {
-    priv reader: R
-}
-
-impl<R: Reader> ReaderRng<R> {
-    /// Create a new `ReaderRng` from a `Reader`.
-    pub fn new(r: R) -> ReaderRng<R> {
-        ReaderRng {
-            reader: r
-        }
-    }
-}
-
-impl<R: Reader> Rng for ReaderRng<R> {
-    fn next_u32(&mut self) -> u32 {
-        // This is designed for speed: reading a LE integer on a LE
-        // platform just involves blitting the bytes into the memory
-        // of the u32, similarly for BE on BE; avoiding byteswapping.
-        if cfg!(target_endian="little") {
-            self.reader.read_le_u32().unwrap()
-        } else {
-            self.reader.read_be_u32().unwrap()
-        }
-    }
-    fn next_u64(&mut self) -> u64 {
-        // see above for explanation.
-        if cfg!(target_endian="little") {
-            self.reader.read_le_u64().unwrap()
-        } else {
-            self.reader.read_be_u64().unwrap()
-        }
-    }
-    fn fill_bytes(&mut self, v: &mut [u8]) {
-        if v.len() == 0 { return }
-        match self.reader.read(v) {
-            Ok(n) if n == v.len() => return,
-            Ok(n) => fail!("ReaderRng.fill_bytes could not fill buffer: \
-                            read {} out of {} bytes.", n, v.len()),
-            Err(e) => fail!("ReaderRng.fill_bytes error: {}", e)
-        }
-    }
-}
-
-#[cfg(test)]
-mod test {
-    use super::*;
-    use io::MemReader;
-    use cast;
-    use rand::*;
-    use prelude::*;
-
-    #[test]
-    fn test_reader_rng_u64() {
-        // transmute from the target to avoid endianness concerns.
-        let v = ~[1u64, 2u64, 3u64];
-        let bytes: ~[u8] = unsafe {cast::transmute(v)};
-        let mut rng = ReaderRng::new(MemReader::new(bytes));
-
-        assert_eq!(rng.next_u64(), 1);
-        assert_eq!(rng.next_u64(), 2);
-        assert_eq!(rng.next_u64(), 3);
-    }
-    #[test]
-    fn test_reader_rng_u32() {
-        // transmute from the target to avoid endianness concerns.
-        let v = ~[1u32, 2u32, 3u32];
-        let bytes: ~[u8] = unsafe {cast::transmute(v)};
-        let mut rng = ReaderRng::new(MemReader::new(bytes));
-
-        assert_eq!(rng.next_u32(), 1);
-        assert_eq!(rng.next_u32(), 2);
-        assert_eq!(rng.next_u32(), 3);
-    }
-    #[test]
-    fn test_reader_rng_fill_bytes() {
-        let v = [1u8, 2, 3, 4, 5, 6, 7, 8];
-        let mut w = [0u8, .. 8];
-
-        let mut rng = ReaderRng::new(MemReader::new(v.to_owned()));
-        rng.fill_bytes(w);
-
-        assert!(v == w);
-    }
-
-    #[test]
-    #[should_fail]
-    fn test_reader_rng_insufficient_bytes() {
-        let mut rng = ReaderRng::new(MemReader::new(~[]));
-        let mut v = [0u8, .. 3];
-        rng.fill_bytes(v);
-    }
-}