about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2013-01-10 20:09:26 -0800
committerTim Chevalier <chevalier@alum.wellesley.edu>2013-01-10 20:10:10 -0800
commit0274292bed1c1a109cc46d49e4ac685d10b43bb3 (patch)
treeb5955776099d609929dd23e5abb0d01229a2a803 /src/libstd
parent3e7da96fd22faf8587c1717e03a988dce6893bdb (diff)
std: Address XXXes in flatpipes
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/flatpipes.rs75
-rw-r--r--src/libstd/io_util.rs61
-rw-r--r--src/libstd/std.rc1
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