Struct body_image::BodyImage[][src]

pub struct BodyImage { /* fields omitted */ }

A logical buffer of bytes, which may or may not be RAM resident.

Besides a few immediate/convenience constructors found here, use BodySink for the incremental or stream-oriented collection of bytes to produce a BodyImage.

A BodyImage is always in one of the following states, as a buffering strategy:

Ram : A vector of zero, one, or many discontinuous (AKA scattered) byte buffers in Random Access Memory. This state is also used to represent an empty body (without allocation).

FsRead : Body in a (temporary) file, ready for position based, sequential read.

MemMap : Body in a memory mapped file, ready for random access read (optional feature memmap)

All states support concurrent reads. BodyImage is Sync and Send, and supports low-cost shallow Clone via internal (atomic) reference counting.

Methods

impl BodyImage
[src]

Create new empty instance with no allocation. The state is Ram with a zero-capacity vector.

Create a new FsRead instance based on an existing File. The fixed length is used to report BodyImage::len and may be obtained using File::metadata. If the provided length is zero, this returns as per BodyImage::empty() instead. Attempts to read from or mem_map the returned BodyImage can fail if the file is not open for read or is zero length.

Create new instance from a single byte slice.

Create a new instance based on a ReadSlice. The BodyImage::len will be as per ReadSlice::len, and if zero, this returns as per BodyImage::empty(). Attempts to read from or mem_map the returned BodyImage can fail if the file is not open for read or is zero length.

Return true if in state Ram.

Return the current length of body in bytes.

Return true if body is empty.

If FsRead, convert to MemMap by memory mapping the file. No-op for other states.

If Ram with 2 or more buffers, gather by copying into a single contiguous buffer with the same total length. No-op for other states. Buffers are eagerly dropped as they are copied. Possibly in combination with mem_map, this can be used to ensure Cursor (and &[u8] slice) access via reader, at the cost of the copy.

Return a new BodyReader enum over self. The enum provides a consistent Read reference, or can be destructured for access to the specific concrete types.

Given a Read object, a length estimate in bytes, and Tunables read and prepare a new BodyImage. Tunables, the estimate and actual length read will determine which buffering strategy is used. The length estimate provides a hint to use the file system from the start, which is more optimal than writing out accumulated Ram buffers later. If the length can't be estimated, use zero (0).

Write self to out and return length. If FsRead this is performed using std::io::copy with ReadPos as input.

Trait Implementations

impl Clone for BodyImage
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl Debug for BodyImage
[src]

Formats the value using the given formatter. Read more

impl Default for BodyImage
[src]

Returns the "default value" for a type. Read more

Auto Trait Implementations

impl Send for BodyImage

impl Sync for BodyImage