[][src]Struct wasmer_runtime_asml_fork::WasmPtr

#[repr(transparent)]pub struct WasmPtr<T, Ty = Item> where
    T: Copy
{ /* fields omitted */ }

A zero-cost type that represents a pointer to something in Wasm linear memory.

This type can be used directly in the host function arguments:

pub fn host_import(ctx: &mut Ctx, ptr: WasmPtr<u32>) {
    let memory = ctx.memory(0);
    let derefed_ptr = ptr.deref(memory).expect("pointer in bounds");
    let inner_val: u32 = derefed_ptr.get();
    println!("Got {} from Wasm memory address 0x{:X}", inner_val, ptr.offset());
    // update the value being pointed to
    derefed_ptr.set(inner_val + 1);
}

Implementations

impl<T, Ty> WasmPtr<T, Ty> where
    T: Copy
[src]

Methods relevant to all types of WasmPtr.

pub fn new(offset: u32) -> WasmPtr<T, Ty>[src]

Create a new WasmPtr at the given offset.

pub fn offset(self) -> u32[src]

Get the offset into Wasm linear memory for this WasmPtr.

impl<T> WasmPtr<T, Item> where
    T: ValueType + Copy
[src]

Methods for WasmPtrs to data that can be dereferenced, namely to types that implement [ValueType], meaning that they're valid for all possible bit patterns.

pub fn deref(self, memory: &'a Memory) -> Option<&'a AtomicCell<T>>[src]

Dereference the WasmPtr getting access to a &Cell<T> allowing for reading and mutating of the inner value.

This method is unsound if used with unsynchronized shared memory. If you're unsure what that means, it likely does not apply to you. This invariant will be enforced in the future.

pub unsafe fn deref_mut(
    self,
    memory: &'a Memory
) -> Option<&'a mut AtomicCell<T>>
[src]

Mutably dereference this WasmPtr getting a &mut Cell<T> allowing for direct access to a &mut T.

Safety

  • This method does not do any aliasing checks: it's possible to create &mut T that point to the same memory. You should ensure that you have exclusive access to Wasm linear memory before calling this method.

impl<T> WasmPtr<T, Array> where
    T: ValueType + Copy
[src]

Methods for WasmPtrs to arrays of data that can be dereferenced, namely to types that implement [ValueType], meaning that they're valid for all possible bit patterns.

pub fn deref(
    self,
    memory: &Memory,
    index: u32,
    length: u32
) -> Option<&[AtomicCell<T>]>
[src]

Dereference the WasmPtr getting access to a &[Cell<T>] allowing for reading and mutating of the inner values.

This method is unsound if used with unsynchronized shared memory. If you're unsure what that means, it likely does not apply to you. This invariant will be enforced in the future.

pub unsafe fn deref_mut(
    self,
    memory: &Memory,
    index: u32,
    length: u32
) -> Option<&mut [AtomicCell<T>]>
[src]

Mutably dereference this WasmPtr getting a &mut [Cell<T>] allowing for direct access to a &mut [T].

Safety

  • This method does not do any aliasing checks: it's possible to create &mut T that point to the same memory. You should ensure that you have exclusive access to Wasm linear memory before calling this method.

pub fn get_utf8_string(self, memory: &Memory, str_len: u32) -> Option<&str>[src]

Get a UTF-8 string from the WasmPtr with the given length.

Note that this method returns a reference to Wasm linear memory. The underlying data can be mutated if the Wasm is allowed to execute or an aliasing WasmPtr is used to mutate memory.

pub fn get_utf8_string_with_nul(self, memory: &Memory) -> Option<&str>[src]

Get a UTF-8 string from the WasmPtr, where the string is nul-terminated.

Note that this does not account for UTF-8 strings that contain nul themselves, [get_utf8_string] has to be used for those.

Also note that this method returns a reference to Wasm linear memory. The underlying data can be mutated if the Wasm is allowed to execute or an aliasing WasmPtr is used to mutate memory.

Trait Implementations

impl<T, Ty> Clone for WasmPtr<T, Ty> where
    T: Copy
[src]

impl<T, Ty> Copy for WasmPtr<T, Ty> where
    T: Copy
[src]

impl<T, Ty> Debug for WasmPtr<T, Ty> where
    T: Copy
[src]

impl<T, Ty> Eq for WasmPtr<T, Ty> where
    T: Copy
[src]

impl<T, Ty> PartialEq<WasmPtr<T, Ty>> for WasmPtr<T, Ty> where
    T: Copy
[src]

impl<T, Ty> ValueType for WasmPtr<T, Ty> where
    T: Copy
[src]

impl<T, Ty> WasmExternType for WasmPtr<T, Ty> where
    T: Copy
[src]

type Native = i32

Native wasm type for this WasmExternType.

Auto Trait Implementations

impl<T, Ty> RefUnwindSafe for WasmPtr<T, Ty> where
    T: RefUnwindSafe,
    Ty: RefUnwindSafe

impl<T, Ty> Send for WasmPtr<T, Ty> where
    T: Send,
    Ty: Send

impl<T, Ty> Sync for WasmPtr<T, Ty> where
    T: Sync,
    Ty: Sync

impl<T, Ty> Unpin for WasmPtr<T, Ty> where
    T: Unpin,
    Ty: Unpin

impl<T, Ty> UnwindSafe for WasmPtr<T, Ty> where
    T: UnwindSafe,
    Ty: UnwindSafe

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<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

impl<T> From<T> for T[src]

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

impl<T> Same<T> for T

type Output = T

Should always be Self

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

type Owned = T

The resulting type after obtaining ownership.

impl<Rets> TrapEarly<Rets> for Rets where
    Rets: WasmTypeList
[src]

type Error = Infallible

The error type for this trait.

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.

impl<A> WasmTypeList for A where
    A: WasmExternType
[src]

type CStruct = S1<A>

CStruct type.

type RetArray = [u64; 1]

Array of return values.