Struct wasmi::MemoryRef[][src]

pub struct MemoryRef(_);
Expand description

Reference to a memory (See MemoryInstance for details).

This reference has a reference-counting semantics.

Methods from Deref<Target = MemoryInstance>

pub fn initial(&self) -> Pages[src]

Returns number of pages this MemoryInstance was created with.

pub fn maximum(&self) -> Option<Pages>[src]

Returns maximum amount of pages this MemoryInstance can grow to.

Returns None if there is no limit set. Maximum memory size cannot exceed 65536 pages or 4GiB.

pub fn current_size(&self) -> Pages[src]

Returns current linear memory size.

Maximum memory size cannot exceed 65536 pages or 4GiB.

Example

To convert number of pages to number of bytes you can use the following code:

use wasmi::MemoryInstance;
use wasmi::memory_units::*;

let memory = MemoryInstance::alloc(Pages(1), None).unwrap();
let byte_size: Bytes = memory.current_size().into();
assert_eq!(
    byte_size,
    Bytes(65536),
);

pub fn get_value<T: LittleEndianConvert>(&self, offset: u32) -> Result<T, Error>[src]

Get value from memory at given offset.

pub fn get(&self, offset: u32, size: usize) -> Result<Vec<u8>, Error>[src]

Copy data from memory at given offset.

This will allocate vector for you. If you can provide a mutable slice you can use get_into.

pub fn get_into(&self, offset: u32, target: &mut [u8]) -> Result<(), Error>[src]

Copy data from given offset in the memory into target slice.

Errors

Returns Err if the specified region is out of bounds.

pub fn set(&self, offset: u32, value: &[u8]) -> Result<(), Error>[src]

Copy data in the memory at given offset.

pub fn set_value<T: LittleEndianConvert>(
    &self,
    offset: u32,
    value: T
) -> Result<(), Error>
[src]

Copy value in the memory at given offset.

pub fn grow(&self, additional: Pages) -> Result<Pages, Error>[src]

Increases the size of the linear memory by given number of pages. Returns previous memory size if succeeds.

Errors

Returns Err if attempted to allocate more memory than permited by the limit.

pub fn copy(
    &self,
    src_offset: usize,
    dst_offset: usize,
    len: usize
) -> Result<(), Error>
[src]

Copy contents of one memory region to another.

Semantically equivalent to memmove.

Errors

Returns Err if either of specified regions is out of bounds.

pub fn copy_nonoverlapping(
    &self,
    src_offset: usize,
    dst_offset: usize,
    len: usize
) -> Result<(), Error>
[src]

Copy contents of one memory region to another (non-overlapping version).

Semantically equivalent to memcpy. but returns Error if source overlaping with destination.

Errors

Returns Err if:

  • either of specified regions is out of bounds,
  • these regions overlaps.

pub fn clear(&self, offset: usize, new_val: u8, len: usize) -> Result<(), Error>[src]

Fill the memory region with the specified value.

Semantically equivalent to memset.

Errors

Returns Err if the specified region is out of bounds.

pub fn zero(&self, offset: usize, len: usize) -> Result<(), Error>[src]

Fill the specified memory region with zeroes.

Errors

Returns Err if the specified region is out of bounds.

pub fn erase(&self) -> Result<(), Error>[src]

Set every byte in the entire linear memory to 0, preserving its size.

Might be useful for some optimization shenanigans.

pub fn with_direct_access<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R[src]

Provides direct access to the underlying memory buffer.

Panics

Any call that requires write access to memory (such as set, clear, etc) made within the closure will panic.

pub fn with_direct_access_mut<R, F: FnOnce(&mut [u8]) -> R>(&self, f: F) -> R[src]

Provides direct mutable access to the underlying memory buffer.

Panics

Any calls that requires either read or write access to memory (such as get, set, [copy], etc) made within the closure will panic. Proceed with caution.

pub fn direct_access<'a>(&'a self) -> impl AsRef<[u8]> + 'a[src]

Provides direct access to the underlying memory buffer.

Panics

Any call that requires write access to memory (such as set, clear, etc) made while the returned value is alive will panic.

pub fn direct_access_mut<'a>(&'a self) -> impl AsMut<[u8]> + 'a[src]

Provides direct mutable access to the underlying memory buffer.

Panics

Any call that requires either read or write access to memory (such as get, set, [copy], etc) made while the returned value is alive will panic. Proceed with caution.

Trait Implementations

impl Clone for MemoryRef[src]

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

Returns a copy of the value. Read more

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

Performs copy-assignment from source. Read more

impl Debug for MemoryRef[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

impl Deref for MemoryRef[src]

type Target = MemoryInstance

The resulting type after dereferencing.

fn deref(&self) -> &MemoryInstance[src]

Dereferences the value.

Auto Trait Implementations

impl !RefUnwindSafe for MemoryRef

impl !Send for MemoryRef

impl !Sync for MemoryRef

impl Unpin for MemoryRef

impl !UnwindSafe for MemoryRef

Blanket Implementations

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

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

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

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

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

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> Downcast for T where
    T: Any
[src]

pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>[src]

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait. Read more

pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>[src]

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read more

pub fn as_any(&self) -> &(dyn Any + 'static)[src]

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s. Read more

pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)[src]

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s. Read more

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

pub fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + 'static + Sync + Send>[src]

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait. Read more

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

pub fn from(t: T) -> T[src]

Performs the conversion.

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

pub fn into(self) -> U[src]

Performs the conversion.

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

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

Creates owned data from borrowed data, usually by cloning. Read more

pub fn clone_into(&self, target: &mut T)[src]

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

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

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.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

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.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.