Struct scratchpad::MarkerFront[][src]

pub struct MarkerFront<'scratchpad, BufferT, TrackingT> where
    BufferT: 'scratchpad + Buffer,
    TrackingT: 'scratchpad + Tracking
{ /* fields omitted */ }

Scratchpad marker for allocations from the front of the allocation buffer.

A MarkerFront is created when calling the mark_front() method on a Scratchpad instance. Object allocations can only be made from the most recently created MarkerFront or MarkerBack that is still active.

Markers are statically bound to the lifetime of the Scratchpad from which they are created, ensuring that no dangling references are left when the Scratchpad is dropped.

This struct wraps Marker trait methods to avoid the need to import Marker into scope.

Implementations

impl<'scratchpad, BufferT, TrackingT> MarkerFront<'scratchpad, BufferT, TrackingT> where
    BufferT: 'scratchpad + Buffer,
    TrackingT: 'scratchpad + Tracking
[src]

pub fn allocate<'marker, 't, T>(
    &'marker self,
    value: T
) -> Result<Allocation<'marker, 't, T>, Error>
[src]

Allocates space for the given value, moving it into the allocation.

Examples

use scratchpad::Scratchpad;

let scratchpad = Scratchpad::<[u64; 1], [usize; 1]>::new([0], [0]);
let marker = scratchpad.mark_front().unwrap();

let x = marker.allocate(3.14159).unwrap();
assert_eq!(*x, 3.14159);

pub fn allocate_default<'marker, 't, T: Default>(
    &'marker self
) -> Result<Allocation<'marker, 't, T>, Error>
[src]

Allocates space for a value, initializing it to its default.

Examples

use scratchpad::Scratchpad;

let scratchpad = Scratchpad::<[u64; 1], [usize; 1]>::new([0], [0]);
let marker = scratchpad.mark_front().unwrap();

let x = marker.allocate_default::<f64>().unwrap();
assert_eq!(*x, 0.0);

pub unsafe fn allocate_uninitialized<'marker, 't, T>(
    &'marker self
) -> Result<Allocation<'marker, 't, T>, Error>
[src]

Allocates uninitialized space for the given type.

Safety

Since memory for the allocated data is uninitialized, it can potentially be in an invalid state for a given type, leading to undefined program behavior. It is recommended that one of the safe allocate*() methods are used instead if possible.

Examples

use scratchpad::Scratchpad;

let scratchpad = Scratchpad::<[u64; 1], [usize; 1]>::new([0], [0]);
let marker = scratchpad.mark_front().unwrap();

let mut x = unsafe { marker.allocate_uninitialized().unwrap() };
*x = 3.14159;
assert_eq!(*x, 3.14159);

pub fn allocate_array<'marker, 't, T: Clone>(
    &'marker self,
    len: usize,
    value: T
) -> Result<Allocation<'marker, 't, [T]>, Error>
[src]

Allocates space for an array, initializing each element with the given value.

Examples

use scratchpad::Scratchpad;

let scratchpad = Scratchpad::<[u64; 3], [usize; 1]>::new([0; 3], [0]);
let marker = scratchpad.mark_front().unwrap();

let x = marker.allocate_array(3, 3.14159).unwrap();
assert_eq!(*x, [3.14159, 3.14159, 3.14159]);

pub fn allocate_array_default<'marker, 't, T: Default>(
    &'marker self,
    len: usize
) -> Result<Allocation<'marker, 't, [T]>, Error>
[src]

Allocates space for an array, initializing each element to its default value.

Examples

use scratchpad::Scratchpad;

let scratchpad = Scratchpad::<[u64; 3], [usize; 1]>::new([0; 3], [0]);
let marker = scratchpad.mark_front().unwrap();

let x = marker.allocate_array_default::<f64>(3).unwrap();
assert_eq!(*x, [0.0, 0.0, 0.0]);

pub fn allocate_array_with<'marker, 't, T, F: FnMut(usize) -> T>(
    &'marker self,
    len: usize,
    func: F
) -> Result<Allocation<'marker, 't, [T]>, Error>
[src]

Allocates space for an array, initializing each element with the result of a function.

The function func takes a single parameter containing the index of the element being initialized.

Examples

use scratchpad::Scratchpad;

let scratchpad = Scratchpad::<[u64; 3], [usize; 1]>::new([0; 3], [0]);
let marker = scratchpad.mark_front().unwrap();

let x = marker.allocate_array_with(3, |index| index as f64).unwrap();
assert_eq!(*x, [0.0, 1.0, 2.0]);

pub unsafe fn allocate_array_uninitialized<'marker, 't, T>(
    &'marker self,
    len: usize
) -> Result<Allocation<'marker, 't, [T]>, Error>
[src]

Allocates uninitialized space for an array of the given type.

Safety

Since memory for the allocated data is uninitialized, it can potentially be in an invalid state for a given type, leading to undefined program behavior. It is recommended that one of the safe allocate*() methods are used instead if possible.

Examples

use scratchpad::Scratchpad;

let scratchpad = Scratchpad::<[u64; 3], [usize; 1]>::new([0; 3], [0]);
let marker = scratchpad.mark_front().unwrap();

let mut x = unsafe {
    marker.allocate_array_uninitialized(3).unwrap()
};
x[0] = 3.14159;
x[1] = 4.14159;
x[2] = 5.14159;
assert_eq!(*x, [3.14159, 4.14159, 5.14159]);

Trait Implementations

impl<'scratchpad, BufferT: Debug, TrackingT: Debug> Debug for MarkerFront<'scratchpad, BufferT, TrackingT> where
    BufferT: 'scratchpad + Buffer,
    TrackingT: 'scratchpad + Tracking
[src]

impl<'scratchpad, BufferT, TrackingT> Drop for MarkerFront<'scratchpad, BufferT, TrackingT> where
    BufferT: 'scratchpad + Buffer,
    TrackingT: 'scratchpad + Tracking
[src]

impl<'scratchpad, BufferT, TrackingT> Marker for MarkerFront<'scratchpad, BufferT, TrackingT> where
    BufferT: 'scratchpad + Buffer,
    TrackingT: 'scratchpad + Tracking
[src]

Auto Trait Implementations

impl<'scratchpad, BufferT, TrackingT> !RefUnwindSafe for MarkerFront<'scratchpad, BufferT, TrackingT>[src]

impl<'scratchpad, BufferT, TrackingT> !Send for MarkerFront<'scratchpad, BufferT, TrackingT>[src]

impl<'scratchpad, BufferT, TrackingT> !Sync for MarkerFront<'scratchpad, BufferT, TrackingT>[src]

impl<'scratchpad, BufferT, TrackingT> Unpin for MarkerFront<'scratchpad, BufferT, TrackingT>[src]

impl<'scratchpad, BufferT, TrackingT> !UnwindSafe for MarkerFront<'scratchpad, BufferT, TrackingT>[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, 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.