[][src]Struct refpool::PoolBox

pub struct PoolBox<A> { /* fields omitted */ }

A unique pointer to a pool allocated value of A.

Methods

impl<A> PoolBox<A>[src]

pub fn default(pool: &Pool<A>) -> Self where
    A: PoolDefault
[src]

Construct a PoolBox with a newly initialised value of A.

This uses PoolDefault::default_uninit() to initialise a default value, which may be faster than constructing a PoolBox from an existing value using PoolBox::new(), depending on the data type.

Examples

let pool: Pool<usize> = Pool::new(256);
let zero = PoolBox::default(&pool);
assert_eq!(0, *zero);

pub fn new(pool: &Pool<A>, value: A) -> Self[src]

Wrap a value in a PoolBox.

This will copy the entire value into the memory handled by the PoolBox, which may be slower than using PoolBox::default(), so it's not recommended to use this to construct the default value.

Examples

let pool: Pool<usize> = Pool::new(256);
let number = PoolBox::new(&pool, 1337);
assert_eq!(1337, *number);

pub fn clone_from(pool: &Pool<A>, value: &A) -> Self where
    A: PoolClone
[src]

Clone a value and return a new PoolBox to it.

This will use PoolClone::clone_uninit() to perform the clone, which may be more efficient than using PoolBox::new(value.clone()).

Examples

let pool: Pool<Vec<usize>> = Pool::new(1);
let vec = vec![1, 2, 3];
let ref1 = PoolBox::clone_from(&pool, &vec);
assert_eq!(vec, *ref1);

pub fn pin_default(pool: &Pool<A>) -> Pin<Self> where
    A: PoolDefault
[src]

Construct a Pinned PoolBox with a default value.

Examples

let pool: Pool<usize> = Pool::new(256);
let zero = PoolBox::pin_default(&pool);
assert_eq!(0, *zero);

pub fn pin(pool: &Pool<A>, value: A) -> Pin<Self>[src]

Construct a Pinned PoolBox with the given value.

Examples

let pool: Pool<usize> = Pool::new(256);
let number = PoolBox::pin(&pool, 1337);
assert_eq!(1337, *number);

pub fn ptr_eq(left: &Self, right: &Self) -> bool[src]

Test two PoolBoxes for pointer equality.

Examples

let pool: Pool<usize> = Pool::new(1);
let ref1 = PoolBox::default(&pool);
assert!(PoolBox::ptr_eq(&ref1, &ref1));

pub fn into_raw_non_null(b: PoolBox<A>) -> NonNull<A>[src]

Consume the PoolBox and return a pointer to the contents.

Please note that the only proper way to drop the value pointed to is by using PoolBox::from_raw to turn it back into a PoolBox, because the value is followed by PoolBox metadata which also needs to be dropped.

pub fn into_raw(b: PoolBox<A>) -> *mut A[src]

Consume the PoolBox and return a pointer to the contents.

The pointer is guaranteed to be non-null.

Please note that the only proper way to drop the value pointed to is by using PoolBox::from_raw to turn it back into a PoolBox, because the value is followed by PoolBox metadata which also needs to be dropped.

pub unsafe fn from_raw(ptr: *mut A) -> Self[src]

Turn a raw pointer back into a PoolBox.

The pointer must be non-null and obtained from a previous call to PoolBox::into_raw or PoolBox::into_raw_non_null.

Safety

This must only be called on pointers obtained through PoolBox::into_raw. It's not OK to call it on a pointer to a value of A you've allocated yourself.

Examples

let pool: Pool<usize> = Pool::new(1);
let ref1 = PoolBox::new(&pool, 31337);

// Turn the PoolBox into a raw pointer and see if it still works.
let ptr = PoolBox::into_raw(ref1);
assert_eq!(31337, unsafe { *ptr });

// Turn it back into a PoolBox and see, again, if it still works.
let ref2 = unsafe { PoolBox::from_raw(ptr) };
assert_eq!(31337, *ref2);

Trait Implementations

impl<A> AsMut<A> for PoolBox<A>[src]

impl<A> AsRef<A> for PoolBox<A>[src]

impl<A> Borrow<A> for PoolBox<A>[src]

impl<A> BorrowMut<A> for PoolBox<A>[src]

impl<A> Clone for PoolBox<A> where
    A: PoolClone
[src]

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

Clone a PoolBox and its contents.

This will use PoolClone::clone_uninit() to perform the clone, which may be more efficient than using PoolBox::new(value.clone()).

Examples

let pool: Pool<Vec<usize>> = Pool::new(1);
let vec1 = PoolBox::new(&pool, vec![1, 2, 3]);
let vec2 = vec1.clone();
assert_eq!(vec1, vec2);

impl<A> Debug for PoolBox<A> where
    A: Debug
[src]

impl<A> Deref for PoolBox<A>[src]

type Target = A

The resulting type after dereferencing.

impl<A> DerefMut for PoolBox<A>[src]

impl<A> Display for PoolBox<A> where
    A: Display
[src]

impl<A> Drop for PoolBox<A>[src]

impl<A> Eq for PoolBox<A> where
    A: Eq
[src]

impl<A> Hash for PoolBox<A> where
    A: Hash
[src]

impl<A> Ord for PoolBox<A> where
    A: Ord
[src]

impl<A> PartialEq<PoolBox<A>> for PoolBox<A> where
    A: PartialEq
[src]

impl<A> PartialOrd<PoolBox<A>> for PoolBox<A> where
    A: PartialOrd
[src]

impl<A> Pointer for PoolBox<A>[src]

Auto Trait Implementations

impl<A> RefUnwindSafe for PoolBox<A> where
    A: RefUnwindSafe

impl<A> !Send for PoolBox<A>

impl<A> !Sync for PoolBox<A>

impl<A> Unpin for PoolBox<A>

impl<A> UnwindSafe for PoolBox<A> where
    A: RefUnwindSafe

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> ToString for T where
    T: Display + ?Sized
[src]

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.