[][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> Read for ReadSlice<P> where
    P: PosRead
[src]

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

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

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 Self
1.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

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.

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, U> Into for T where
    U: From<T>, 
[src]

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

type Owned = T

impl<T> From for T[src]

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

type Error = Infallible

The type returned in the event of a conversion error.

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

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

impl<T, U> TryInto 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> Any for T where
    T: 'static + ?Sized
[src]