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>
sourcepub fn maximum(&self) -> Option<Pages>
pub fn maximum(&self) -> Option<Pages>
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.
sourcepub fn current_size(&self) -> Pages
pub fn current_size(&self) -> Pages
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),
);
sourcepub fn get_value<T: LittleEndianConvert>(&self, offset: u32) -> Result<T, Error>
pub fn get_value<T: LittleEndianConvert>(&self, offset: u32) -> Result<T, Error>
Get value from memory at given offset.
sourcepub fn get(&self, offset: u32, size: usize) -> Result<Vec<u8>, Error>
pub fn get(&self, offset: u32, size: usize) -> Result<Vec<u8>, Error>
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
.
sourcepub fn get_into(&self, offset: u32, target: &mut [u8]) -> Result<(), Error>
pub fn get_into(&self, offset: u32, target: &mut [u8]) -> Result<(), Error>
Copy data from given offset in the memory into target
slice.
Errors
Returns Err
if the specified region is out of bounds.
sourcepub fn set(&self, offset: u32, value: &[u8]) -> Result<(), Error>
pub fn set(&self, offset: u32, value: &[u8]) -> Result<(), Error>
Copy data in the memory at given offset.
sourcepub fn set_value<T: LittleEndianConvert>(
&self,
offset: u32,
value: T
) -> Result<(), Error>
pub fn set_value<T: LittleEndianConvert>(
&self,
offset: u32,
value: T
) -> Result<(), Error>
Copy value in the memory at given offset.
sourcepub fn grow(&self, additional: Pages) -> Result<Pages, Error>
pub fn grow(&self, additional: Pages) -> Result<Pages, Error>
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.
sourcepub fn copy(
&self,
src_offset: usize,
dst_offset: usize,
len: usize
) -> Result<(), Error>
pub fn copy(
&self,
src_offset: usize,
dst_offset: usize,
len: usize
) -> Result<(), Error>
Copy contents of one memory region to another.
Semantically equivalent to memmove
.
Errors
Returns Err
if either of specified regions is out of bounds.
sourcepub fn copy_nonoverlapping(
&self,
src_offset: usize,
dst_offset: usize,
len: usize
) -> Result<(), Error>
pub fn copy_nonoverlapping(
&self,
src_offset: usize,
dst_offset: usize,
len: usize
) -> Result<(), Error>
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.
sourcepub fn clear(&self, offset: usize, new_val: u8, len: usize) -> Result<(), Error>
pub fn clear(&self, offset: usize, new_val: u8, len: usize) -> Result<(), Error>
Fill the memory region with the specified value.
Semantically equivalent to memset
.
Errors
Returns Err
if the specified region is out of bounds.
sourcepub fn zero(&self, offset: usize, len: usize) -> Result<(), Error>
pub fn zero(&self, offset: usize, len: usize) -> Result<(), Error>
Fill the specified memory region with zeroes.
Errors
Returns Err
if the specified region is out of bounds.
sourcepub fn erase(&self) -> Result<(), Error>
pub fn erase(&self) -> Result<(), Error>
Set every byte in the entire linear memory to 0, preserving its size.
Might be useful for some optimization shenanigans.
Trait Implementations
sourceimpl Deref for MemoryRef
impl Deref for MemoryRef
type Target = MemoryInstance
type Target = MemoryInstance
The resulting type after dereferencing.
sourcefn deref(&self) -> &MemoryInstance
fn deref(&self) -> &MemoryInstance
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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more