Add Seek::seek_relative
This commit is contained in:
parent
ee8c9d3c34
commit
d6337e6568
2 changed files with 36 additions and 0 deletions
|
@ -492,6 +492,16 @@ impl<R: ?Sized + Seek> Seek for BufReader<R> {
|
|||
)
|
||||
})
|
||||
}
|
||||
|
||||
/// Seeks relative to the current position.
|
||||
///
|
||||
/// If the new position lies within the buffer, the buffer will not be
|
||||
/// flushed, allowing for more efficient seeks. This method does not return
|
||||
/// the location of the underlying reader, so the caller must track this
|
||||
/// information themselves if it is required.
|
||||
fn seek_relative(&mut self, offset: i64) -> io::Result<()> {
|
||||
self.seek_relative(offset)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: ?Sized> SizeHint for BufReader<T> {
|
||||
|
|
|
@ -1957,6 +1957,32 @@ pub trait Seek {
|
|||
fn stream_position(&mut self) -> Result<u64> {
|
||||
self.seek(SeekFrom::Current(0))
|
||||
}
|
||||
|
||||
/// Seeks relative to the current position.
|
||||
///
|
||||
/// This is equivalent to `self.seek(SeekFrom::Current(offset))`.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```no_run
|
||||
/// #![feature(seek_seek_relative)]
|
||||
/// use std::{
|
||||
/// io::{self, Seek},
|
||||
/// fs::File,
|
||||
/// };
|
||||
///
|
||||
/// fn main() -> io::Result<()> {
|
||||
/// let mut f = File::open("foo.txt")?;
|
||||
/// f.seek_relative(10)?;
|
||||
/// assert_eq!(f.stream_position()?, 10);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[unstable(feature = "seek_seek_relative", issue = "none")]
|
||||
fn seek_relative(&mut self, offset: i64) -> Result<()> {
|
||||
self.seek(SeekFrom::Current(offset))?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
/// Enumeration of possible methods to seek within an I/O object.
|
||||
|
|
Loading…
Add table
Reference in a new issue