Skip to content

Commit

Permalink
Allow mutable access to wrapped internal type in Buffered*
Browse files Browse the repository at this point in the history
This is necessary to e.g. set a timeout on the underlying stream.
  • Loading branch information
sfackler committed Nov 26, 2014
1 parent 0e06f71 commit 945b4ed
Showing 1 changed file with 26 additions and 10 deletions.
36 changes: 26 additions & 10 deletions src/libstd/io/buffered.rs
Expand Up @@ -75,10 +75,14 @@ impl<R: Reader> BufferedReader<R> {
}

/// Gets a reference to the underlying reader.
pub fn get_ref<'a>(&self) -> &R { &self.inner }

/// Gets a mutable reference to the underlying reader.
///
/// This type does not expose the ability to get a mutable reference to the
/// underlying reader because that could possibly corrupt the buffer.
pub fn get_ref<'a>(&'a self) -> &'a R { &self.inner }
/// ## Warning
///
/// It is inadvisable to directly read from the underlying reader.
pub fn get_mut(&mut self) -> &mut R { &mut self.inner }

/// Unwraps this `BufferedReader`, returning the underlying reader.
///
Expand Down Expand Up @@ -176,10 +180,14 @@ impl<W: Writer> BufferedWriter<W> {
}

/// Gets a reference to the underlying writer.
pub fn get_ref(&self) -> &W { self.inner.as_ref().unwrap() }

/// Gets a mutable reference to the underlying write.
///
/// This type does not expose the ability to get a mutable reference to the
/// underlying reader because that could possibly corrupt the buffer.
pub fn get_ref<'a>(&'a self) -> &'a W { self.inner.as_ref().unwrap() }
/// ## Warning
///
/// It is inadvisable to directly read from the underlying writer.
pub fn get_mut(&mut self) -> &mut W { self.inner.as_mut().unwrap() }

/// Unwraps this `BufferedWriter`, returning the underlying writer.
///
Expand Down Expand Up @@ -341,14 +349,22 @@ impl<S: Stream> BufferedStream<S> {
}

/// Gets a reference to the underlying stream.
///
/// This type does not expose the ability to get a mutable reference to the
/// underlying reader because that could possibly corrupt the buffer.
pub fn get_ref<'a>(&'a self) -> &'a S {
pub fn get_ref(&self) -> &S {
let InternalBufferedWriter(ref w) = self.inner.inner;
w.get_ref()
}

/// Gets a mutable reference to the underlying stream.
///
/// ## Warning
///
/// It is inadvisable to read directly from or write directly to the
/// underlying stream.
pub fn get_mut(&mut self) -> &mut S {
let InternalBufferedWriter(ref mut w) = self.inner.inner;
w.get_mut()
}

/// Unwraps this `BufferedStream`, returning the underlying stream.
///
/// The internal buffer is flushed before returning the stream. Any leftover
Expand Down

0 comments on commit 945b4ed

Please sign in to comment.