[][src]Struct contrail::mem::Pointer

pub struct Pointer<T> { /* fields omitted */ }

A reference to a value in memory.

Warning

A Pointer is only usable with the Memory from the MemoryBuilder used to create the Pointer. Using a Pointer with any other memory is considered undefined behavior.

Examples

use contrail::mem::{MemoryBuilder, Pointer};

let mut builder = MemoryBuilder::new();
let pointer = Pointer::new(&mut builder, 10);
let mut memory = builder.finish();

assert_eq!(pointer.get(&memory), 10);

pointer.update(&mut memory, |x| x * 2);
assert_eq!(pointer.get(&memory), 20);

Methods

impl<T> Pointer<T> where
    T: Bytes
[src]

pub fn new(builder: &mut MemoryBuilder, val: T) -> Self[src]

Creates a new pointer to the given value in memory.

The pointer is only usable after the MemoryBuilder is finished and Memory is created.

Examples

use contrail::mem::{MemoryBuilder, Pointer};

let mut builder = MemoryBuilder::new();
let pointer = Pointer::new(&mut builder, 'b');
let memory = builder.finish();

// the pointer is usable now
assert_eq!(pointer.get(&memory), 'b');

pub fn get(self, memory: &Memory) -> T[src]

Gets the value of the pointer from memory.

Examples

use contrail::mem::{MemoryBuilder, Pointer};

let mut builder = MemoryBuilder::new();
let pi = Pointer::new(&mut builder, 3.14);
let memory = builder.finish();

assert_eq!(pi.get(&memory), 3.14);

pub fn set(self, memory: &mut Memory, val: T)[src]

Sets the value of the pointer in memory.

Examples

use contrail::mem::{MemoryBuilder, Pointer};

let mut builder = MemoryBuilder::new();
let letter = Pointer::new(&mut builder, 'a');
let mut memory = builder.finish();

letter.set(&mut memory, 'z');
assert_eq!(letter.get(&memory), 'z');

pub fn update(self, memory: &mut Memory, f: impl FnOnce(T) -> T)[src]

Updates the value in memory using the given function.

Examples

use contrail::mem::{MemoryBuilder, Pointer};

let mut builder = MemoryBuilder::new();
let side = Pointer::new(&mut builder, 5);
let mut memory = builder.finish();

side.update(&mut memory, |x| x * x);
assert_eq!(side.get(&memory), 25);

Trait Implementations

impl<T> PartialEq<Pointer<T>> for Pointer<T>[src]

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0
[src]

This method tests for !=.

impl<T> Clone for Pointer<T>[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl<T> Eq for Pointer<T>[src]

impl<T> Copy for Pointer<T>[src]

impl<T> Debug for Pointer<T>[src]

Auto Trait Implementations

impl<T> Send for Pointer<T> where
    T: Send

impl<T> Sync for Pointer<T> where
    T: Sync

Blanket Implementations

impl<T> From for T[src]

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

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

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

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

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.