#[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§
source§impl 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 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.