diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2013-01-10 20:09:26 -0800 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2013-01-10 20:10:10 -0800 |
| commit | 0274292bed1c1a109cc46d49e4ac685d10b43bb3 (patch) | |
| tree | b5955776099d609929dd23e5abb0d01229a2a803 /src/libstd | |
| parent | 3e7da96fd22faf8587c1717e03a988dce6893bdb (diff) | |
std: Address XXXes in flatpipes
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/flatpipes.rs | 75 | ||||
| -rw-r--r-- | src/libstd/io_util.rs | 61 | ||||
| -rw-r--r-- | src/libstd/std.rc | 1 |
3 files changed, 70 insertions, 67 deletions
diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index 07201a1180d..0607055db5c 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -329,7 +329,7 @@ pub impl<T,F:Flattener<T>,C:ByteChan> FlatChan<T, F, C> { pub mod flatteners { use ebml; use flatpipes::{ByteChan, BytePort, Flattener, Unflattener}; - use flatpipes::util::BufReader; + use io_util::BufReader; use json; use serialize::{Encoder, Decoder, Encodable, Decodable}; @@ -340,7 +340,8 @@ pub mod flatteners { use core::sys::size_of; use core::vec; - // XXX: Is copy/send equivalent to pod? + + // FIXME #4074: Copy + Owned != POD pub struct PodUnflattener<T: Copy Owned> { bogus: () } @@ -625,78 +626,18 @@ pub mod bytepipes { } -// XXX: This belongs elsewhere -mod util { - use core::io::{Reader, BytesReader}; - use core::io; - use core::prelude::*; - - pub struct BufReader { - buf: ~[u8], - mut pos: uint - } - - pub impl BufReader { - static pub fn new(v: ~[u8]) -> BufReader { - BufReader { - buf: move v, - pos: 0 - } - } - - priv fn as_bytes_reader<A>(f: &fn(&BytesReader) -> A) -> A { - // Recreating the BytesReader state every call since - // I can't get the borrowing to work correctly - let bytes_reader = BytesReader { - bytes: ::core::util::id::<&[u8]>(self.buf), - pos: self.pos - }; - - let res = f(&bytes_reader); - - // XXX: This isn't correct if f fails - self.pos = bytes_reader.pos; - - return move res; - } - } - - impl BufReader: Reader { - fn read(&self, bytes: &[mut u8], len: uint) -> uint { - self.as_bytes_reader(|r| r.read(bytes, len) ) - } - fn read_byte(&self) -> int { - self.as_bytes_reader(|r| r.read_byte() ) - } - fn eof(&self) -> bool { - self.as_bytes_reader(|r| r.eof() ) - } - fn seek(&self, offset: int, whence: io::SeekStyle) { - self.as_bytes_reader(|r| r.seek(offset, whence) ) - } - fn tell(&self) -> uint { - self.as_bytes_reader(|r| r.tell() ) - } - } - -} - #[cfg(test)] mod test { use core::prelude::*; - // XXX: json::Decoder doesn't work because of problems related to - // its interior pointers - //use DefaultEncoder = json::Encoder; - //use DefaultDecoder = json::Decoder; - use DefaultEncoder = ebml::writer::Encoder; - use DefaultDecoder = ebml::reader::Decoder; + use DefaultEncoder = json::Encoder; + use DefaultDecoder = json::Decoder; use flatpipes::flatteners::*; use flatpipes::bytepipes::*; use flatpipes::pod; use flatpipes::serial; - use flatpipes::util::BufReader; + use io_util::BufReader; use flatpipes::{BytePort, FlatChan, FlatPort}; use net::ip; use net::tcp::TcpSocketBuf; @@ -787,7 +728,7 @@ mod test { } } - // XXX: Networking doesn't work on x86 + // FIXME #2064: Networking doesn't work on x86 #[test] #[cfg(target_arch = "x86_64")] fn test_pod_tcp_stream() { @@ -934,7 +875,7 @@ mod test { use flatpipes::{BytePort, FlatPort}; use flatpipes::flatteners::PodUnflattener; use flatpipes::pod; - use flatpipes::util::BufReader; + use io_util::BufReader; use core::io; use core::pipes; diff --git a/src/libstd/io_util.rs b/src/libstd/io_util.rs new file mode 100644 index 00000000000..fb410c19a76 --- /dev/null +++ b/src/libstd/io_util.rs @@ -0,0 +1,61 @@ +// Copyright 2012 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. + +use core::io::{Reader, BytesReader}; +use core::io; +use core::prelude::*; + +pub struct BufReader { + buf: ~[u8], + mut pos: uint +} + +pub impl BufReader { + static pub fn new(v: ~[u8]) -> BufReader { + BufReader { + buf: move v, + pos: 0 + } + } + + priv fn as_bytes_reader<A>(f: &fn(&BytesReader) -> A) -> A { + // Recreating the BytesReader state every call since + // I can't get the borrowing to work correctly + let bytes_reader = BytesReader { + bytes: ::core::util::id::<&[u8]>(self.buf), + pos: self.pos + }; + + let res = f(&bytes_reader); + + // FIXME #4429: This isn't correct if f fails + self.pos = bytes_reader.pos; + + return move res; + } +} + +impl BufReader: Reader { + fn read(&self, bytes: &[mut u8], len: uint) -> uint { + self.as_bytes_reader(|r| r.read(bytes, len) ) + } + fn read_byte(&self) -> int { + self.as_bytes_reader(|r| r.read_byte() ) + } + fn eof(&self) -> bool { + self.as_bytes_reader(|r| r.eof() ) + } + fn seek(&self, offset: int, whence: io::SeekStyle) { + self.as_bytes_reader(|r| r.seek(offset, whence) ) + } + fn tell(&self) -> uint { + self.as_bytes_reader(|r| r.tell() ) + } +} diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 22cb9153571..eea9bd0a40f 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -57,6 +57,7 @@ pub mod uv_global_loop; pub mod c_vec; pub mod timer; pub mod cell; +pub mod io_util; // Concurrency |
