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]

[src]

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

[src]

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.

[src]

Create new instance from a single byte slice.

[src]

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.

[src]

Return true if in state Ram.

[src]

Return the current length of body in bytes.

[src]

Return true if body is empty.

[src]

Deprecated

Formerly, this rewound 'FsRead', but now is an unnecessary no-op. The reader method always returns a Read from the start of the BodyImage for all states.

[src]

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

[src]

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.

[src]

Deprecated

Clone self by shallow copy, returning a new BodyImage. This is currently infallible and deprecated in favor of clone.

[src]

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.

[src]

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).

[src]

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]

[src]

Returns a copy of the value. Read more

1.0.0
[src]

Performs copy-assignment from source. Read more

impl Debug for BodyImage
[src]

[src]

Formats the value using the given formatter. Read more

impl Default for BodyImage
[src]

[src]

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

Auto Trait Implementations

impl Send for BodyImage

impl Sync for BodyImage