Added W: Writer bound to BufferedWriter<W> to avoid specialized Drop impl.

This commit is contained in:
Felix S. Klock II 2015-03-21 13:28:20 +01:00
parent 1249e60891
commit 1e71d2e71c

View File

@ -148,14 +148,14 @@ impl<R: Reader> Reader for BufferedReader<R> {
/// writer.write_str("hello, world").unwrap();
/// writer.flush().unwrap();
/// ```
pub struct BufferedWriter<W> {
pub struct BufferedWriter<W: Writer> {
inner: Option<W>,
buf: Vec<u8>,
pos: uint
}
#[stable(feature = "rust1", since = "1.0.0")]
impl<W> fmt::Debug for BufferedWriter<W> where W: fmt::Debug {
impl<W: Writer> fmt::Debug for BufferedWriter<W> where W: fmt::Debug {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "BufferedWriter {{ writer: {:?}, buffer: {}/{} }}",
self.inner.as_ref().unwrap(), self.pos, self.buf.len())
@ -250,12 +250,12 @@ impl<W: Writer> Drop for BufferedWriter<W> {
/// `'\n'`) is detected.
///
/// This writer will be flushed when it is dropped.
pub struct LineBufferedWriter<W> {
pub struct LineBufferedWriter<W: Writer> {
inner: BufferedWriter<W>,
}
#[stable(feature = "rust1", since = "1.0.0")]
impl<W> fmt::Debug for LineBufferedWriter<W> where W: fmt::Debug {
impl<W: Writer> fmt::Debug for LineBufferedWriter<W> where W: fmt::Debug {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "LineBufferedWriter {{ writer: {:?}, buffer: {}/{} }}",
self.inner.inner, self.inner.pos, self.inner.buf.len())
@ -299,16 +299,16 @@ impl<W: Writer> Writer for LineBufferedWriter<W> {
fn flush(&mut self) -> IoResult<()> { self.inner.flush() }
}
struct InternalBufferedWriter<W>(BufferedWriter<W>);
struct InternalBufferedWriter<W: Writer>(BufferedWriter<W>);
impl<W> InternalBufferedWriter<W> {
impl<W: Writer> InternalBufferedWriter<W> {
fn get_mut<'a>(&'a mut self) -> &'a mut BufferedWriter<W> {
let InternalBufferedWriter(ref mut w) = *self;
return w;
}
}
impl<W: Reader> Reader for InternalBufferedWriter<W> {
impl<W: Reader + Writer> Reader for InternalBufferedWriter<W> {
fn read(&mut self, buf: &mut [u8]) -> IoResult<uint> {
self.get_mut().inner.as_mut().unwrap().read(buf)
}
@ -343,12 +343,12 @@ impl<W: Reader> Reader for InternalBufferedWriter<W> {
/// Err(e) => println!("error reading: {}", e)
/// }
/// ```
pub struct BufferedStream<S> {
pub struct BufferedStream<S: Writer> {
inner: BufferedReader<InternalBufferedWriter<S>>
}
#[stable(feature = "rust1", since = "1.0.0")]
impl<S> fmt::Debug for BufferedStream<S> where S: fmt::Debug {
impl<S: Writer> fmt::Debug for BufferedStream<S> where S: fmt::Debug {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
let reader = &self.inner;
let writer = &self.inner.inner.0;