[][src]Struct olio::fs::ReadSlice

pub struct ReadSlice<P> where
    P: PosRead
{ /* fields omitted */ }

Re-implements Read and Seek over PosRead using only positioned reads, and by maintaining instance independent start, end, and position.

PosRead is implemented for any Borrow<File> so this can own via ReadSlice<File> or use a shared reference, as in ReadSlice<&File> or ReadSlice<Arc<File>>.

As compared with ReadPos, ReadSlice adds a general start offset, and limits access to the start..end range. Seeks are relative, so a seek to SeekFrom::Start(0) is always the first byte of the slice.

Fixed start and end offsets are passed on construction and used to constrain reads and interpret SeekFrom::Start and SeekFrom::End. These offsets are neither checked against nor updated from the inner PosRead (for example via file metadata) and could deviate if concurrent writes or truncation is possible. Reads beyond end or the end of the inner PosRead will return 0 length. Seeking past the end is allowed by the platforms for File, and is also allowed for ReadSlice.

Methods

impl<P> ReadSlice<P> where
    P: PosRead
[src]

pub fn new(pos_read: P, start: u64, end: u64) -> Self[src]

New instance by PosRead instance, fixed start and end offsets. The initial position is at the start (relative offset 0).

pub fn len(&self) -> u64[src]

Return the total size of the slice in bytes. This is based on the start and end offsets as constructed and can differ from the inner PosRead length.

pub fn is_empty(&self) -> bool[src]

Return true if length is 0.

pub fn tell(&self) -> u64[src]

Return the current instance position, relative to the slice. This is a convenience shorthand for seek(SeekFrom::Current(0)), is infallable, and does not require a mutable reference.

impl<P> ReadSlice<P> where
    P: PosRead + Clone
[src]

Important traits for ReadSlice<P>
pub fn subslice(&self, start: u64, end: u64) -> ReadSlice<P>[src]

Return a new and independent ReadSlice by clone of the inner PosRead, for the range of byte offsets start..end which are relative to, and must be fully contained by self. This implementation panics on overflow, if start..end is not fully contained, or if start is greater-than end.

impl<P> ReadSlice<P> where
    P: PosRead + Borrow<File>, 
[src]

pub fn mem_map(&self) -> Result<Mmap, Error>[src]

Return a new read-only memory map handle Mmap for the complete region of the underlying File, from start to end.

Trait Implementations

impl<P> PosRead for ReadSlice<P> where
    P: PosRead
[src]

impl<P> Clone for ReadSlice<P> where
    P: PosRead + Clone
[src]

fn clone(&self) -> Self[src]

Return a new, independent ReadSlice by clone of the inner PosRead, with the same start and end as self, and positioned at start.

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl<P: Debug> Debug for ReadSlice<P> where
    P: PosRead
[src]

impl<P> Seek for ReadSlice<P> where
    P: PosRead
[src]

fn seek(&mut self, from: SeekFrom) -> Result<u64>[src]

Seek to an offset, in bytes, in a stream. In this implementation, seeks are relative to the fixed start offset so a seek to SeekFrom::Start(0) is always the first byte of the slice.

fn stream_len(&mut self) -> Result<u64, Error>[src]

🔬 This is a nightly-only experimental API. (seek_convenience)

Returns the length of this stream (in bytes). Read more

fn stream_position(&mut self) -> Result<u64, Error>[src]

🔬 This is a nightly-only experimental API. (seek_convenience)

Returns the current seek position from the start of the stream. Read more

impl<P> Read for ReadSlice<P> where
    P: PosRead
[src]

fn read_vectored(&mut self, bufs: &mut [IoSliceMut]) -> Result<usize, Error>1.36.0[src]

Like read, except that it reads into a slice of buffers. Read more

unsafe fn initializer(&self) -> Initializer[src]

🔬 This is a nightly-only experimental API. (read_initializer)

Determines if this Reader can work with buffers of uninitialized memory. Read more

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>1.0.0[src]

Read all bytes until EOF in this source, placing them into buf. Read more

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>1.0.0[src]

Read all bytes until EOF in this source, appending them to buf. Read more

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>1.6.0[src]

Read the exact number of bytes required to fill buf. Read more

fn by_ref(&mut self) -> &mut Self1.0.0[src]

Creates a "by reference" adaptor for this instance of Read. Read more

fn bytes(self) -> Bytes<Self>1.0.0[src]

Transforms this Read instance to an [Iterator] over its bytes. Read more

fn chain<R>(self, next: R) -> Chain<Self, R> where
    R: Read
1.0.0[src]

Creates an adaptor which will chain this stream with another. Read more

fn take(self, limit: u64) -> Take<Self>1.0.0[src]

Creates an adaptor which will read at most limit bytes from it. Read more

Auto Trait Implementations

impl<P> Send for ReadSlice<P> where
    P: Send

impl<P> Sync for ReadSlice<P> where
    P: Sync

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]