#[repr(transparent)]pub struct Table(_);
Expand description
A WebAssembly table
, or an array of values.
Like Memory
a table is an indexed array of values, but unlike Memory
it’s an array of WebAssembly reference type values rather than bytes. One of
the most common usages of a table is a function table for wasm modules (a
funcref
table), where each element has the ValType::FuncRef
type.
A Table
“belongs” to the store that it was originally created within
(either via Table::new
or via instantiating a
Module
). Operations on a Table
only work with the
store it belongs to, and if another store is passed in by accident then
methods will panic.
Implementations
sourceimpl Table
impl Table
sourcepub fn new(store: impl AsContextMut, ty: TableType, init: Val) -> Result<Table>
pub fn new(store: impl AsContextMut, ty: TableType, init: Val) -> Result<Table>
Creates a new Table
with the given parameters.
store
- the owner of the resultingTable
ty
- the type of this table, containing both the element type as well as the initial size and maximum size, if any.init
- the initial value to fill all table entries with, if the table starts with an initial size.
Errors
Returns an error if init
does not match the element type of the table,
or if init
does not belong to the store
provided.
Panics
This function will panic when used with a Store
which has a ResourceLimiterAsync
(see also: Store::limiter_async
.
When using an async resource limiter, use Table::new_async
instead.
Examples
let engine = Engine::default();
let mut store = Store::new(&engine, ());
let ty = TableType::new(ValType::FuncRef, 2, None);
let table = Table::new(&mut store, ty, Val::FuncRef(None))?;
let module = Module::new(
&engine,
"(module
(table (import \"\" \"\") 2 funcref)
(func $f (result i32)
i32.const 10)
(elem (i32.const 0) $f)
)"
)?;
let instance = Instance::new(&mut store, &module, &[table.into()])?;
// ...
sourcepub async fn new_async<T>(
store: impl AsContextMut<Data = T>,
ty: TableType,
init: Val
) -> Result<Table> where
T: Send,
pub async fn new_async<T>(
store: impl AsContextMut<Data = T>,
ty: TableType,
init: Val
) -> Result<Table> where
T: Send,
Async variant of Table::new
. You must use this variant with
Store
s which have a
ResourceLimiterAsync
.
Panics
This function will panic when used with a non-async
Store
sourcepub fn ty(&self, store: impl AsContext) -> TableType
pub fn ty(&self, store: impl AsContext) -> TableType
Returns the underlying type of this table, including its element type as well as the maximum/minimum lower bounds.
Panics
Panics if store
does not own this table.
sourcepub fn get(&self, store: impl AsContextMut, index: u32) -> Option<Val>
pub fn get(&self, store: impl AsContextMut, index: u32) -> Option<Val>
Returns the table element value at index
.
Returns None
if index
is out of bounds.
Panics
Panics if store
does not own this table.
sourcepub fn grow(
&self,
store: impl AsContextMut,
delta: u32,
init: Val
) -> Result<u32>
pub fn grow(
&self,
store: impl AsContextMut,
delta: u32,
init: Val
) -> Result<u32>
Grows the size of this table by delta
more elements, initialization
all new elements to init
.
Returns the previous size of this table if successful.
Errors
Returns an error if the table cannot be grown by delta
, for example
if it would cause the table to exceed its maximum size. Also returns an
error if init
is not of the right type or if init
does not belong to
store
.
Panics
Panics if store
does not own this table.
This function will panic when used with a Store
which has a ResourceLimiterAsync
(see also: Store::limiter_async
).
When using an async resource limiter, use Table::grow_async
instead.
sourcepub async fn grow_async<T>(
&self,
store: impl AsContextMut<Data = T>,
delta: u32,
init: Val
) -> Result<u32> where
T: Send,
pub async fn grow_async<T>(
&self,
store: impl AsContextMut<Data = T>,
delta: u32,
init: Val
) -> Result<u32> where
T: Send,
Async variant of Table::grow
. Required when using a
ResourceLimiterAsync
.
Panics
This function will panic when used with a non-async
Store
.
sourcepub fn copy(
store: impl AsContextMut,
dst_table: &Table,
dst_index: u32,
src_table: &Table,
src_index: u32,
len: u32
) -> Result<()>
pub fn copy(
store: impl AsContextMut,
dst_table: &Table,
dst_index: u32,
src_table: &Table,
src_index: u32,
len: u32
) -> Result<()>
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for Table
impl Send for Table
impl Sync for Table
impl Unpin for Table
impl UnwindSafe for Table
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Pointable for T
impl<T> Pointable for T
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.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more