[][src]Struct olio::mem::MemHandle

pub struct MemHandle<T> where
    T: Deref<Target = [u8]>, 
{ /* fields omitted */ }

Wrapper over a byte buffer, supporting concurrent memory access advice, where the highest priority advice wins.

This is likely to only be useful for memory mapped regions and memory mapped files in particular.

Uses an internal Arc over shared state, so cloning the handle is inexpensive. Each new and cloned handle starts with the implicit MemAdvice::Normal. The shared state, a list of advisor interest counts, is maintained as a single atomic integer, for minimal overhead. Each MemAdvice level is allocated 10-bits or up to 1,023 MemHandle advisors. Any advice beyond this capacity or after an error is returned from advise, may be ignored, favoring the prior highest priority advice.

Implementations

impl<T> MemHandle<T> where
    T: Deref<Target = [u8]>, 
[src]

pub fn new(mem: T) -> MemHandle<T>[src]

Wrap an owned instance of a byte slice buffer. Additional (atomic) references to the underlying buffer can then be created by clone of this handle.

pub fn advise(&self, advice: MemAdvice) -> Result<MemAdvice, MemAdviseError>[src]

Advise on access plans for the underlying memory. There may be multiple cloned handles to the same memory region, so the advice is only relayed to the operating system if it has greater priority than any other advice made via another surviving handle. On success, returns the MemAdvice as relayed, or a snapshot of the current, highest priority advice. Returns an error if the underlying system call fails.

Trait Implementations

impl<T> Clone for MemHandle<T> where
    T: Deref<Target = [u8]>, 
[src]

impl<T: Debug> Debug for MemHandle<T> where
    T: Deref<Target = [u8]>, 
[src]

impl<T> Deref for MemHandle<T> where
    T: Deref<Target = [u8]>, 
[src]

type Target = [u8]

The resulting type after dereferencing.

impl<T> Drop for MemHandle<T> where
    T: Deref<Target = [u8]>, 
[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for MemHandle<T> where
    T: RefUnwindSafe
[src]

impl<T> Send for MemHandle<T> where
    T: Send + Sync
[src]

impl<T> Sync for MemHandle<T> where
    T: Send + Sync
[src]

impl<T> Unpin for MemHandle<T>[src]

impl<T> UnwindSafe for MemHandle<T> where
    T: RefUnwindSafe
[src]

Blanket Implementations

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

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

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

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.