Enum wasmtime_runtime::Table
source · pub enum Table {
Static {
data: &'static mut [Option<SendSyncPtr<u8>>],
size: u32,
ty: TableElementType,
},
Dynamic {
elements: Vec<Option<SendSyncPtr<u8>>>,
ty: TableElementType,
maximum: Option<u32>,
},
}
Expand description
Represents an instance’s table.
Variants§
Static
Fields
data: &'static mut [Option<SendSyncPtr<u8>>]
Where data for this table is stored. The length of this list is the maximum size of the table.
ty: TableElementType
The type of this table.
A “static” table where storage space is managed externally, currently used with the pooling allocator.
Dynamic
Fields
elements: Vec<Option<SendSyncPtr<u8>>>
Dynamically managed storage space for this table. The length of this vector is the current size of the table.
ty: TableElementType
The type of this table.
A “dynamic” table where table storage space is dynamically allocated via
malloc
(aka Rust’s Vec
).
Implementations§
source§impl Table
impl Table
sourcepub fn new_dynamic(plan: &TablePlan, store: &mut dyn Store) -> Result<Self>
pub fn new_dynamic(plan: &TablePlan, store: &mut dyn Store) -> Result<Self>
Create a new dynamic (movable) table instance for the specified table plan.
sourcepub fn new_static(
plan: &TablePlan,
data: &'static mut [Option<SendSyncPtr<u8>>],
store: &mut dyn Store
) -> Result<Self>
pub fn new_static( plan: &TablePlan, data: &'static mut [Option<SendSyncPtr<u8>>], store: &mut dyn Store ) -> Result<Self>
Create a new static (immovable) table instance for the specified table plan.
sourcepub fn element_type(&self) -> TableElementType
pub fn element_type(&self) -> TableElementType
Returns the type of the elements in this table.
sourcepub fn maximum(&self) -> Option<u32>
pub fn maximum(&self) -> Option<u32>
Returns the maximum number of elements at runtime.
Returns None
if the table is unbounded.
The runtime maximum may not be equal to the maximum from the table’s Wasm type when it is being constrained by an instance allocator.
sourcepub fn init_func(&mut self, init: *mut VMFuncRef) -> Result<(), Trap>
pub fn init_func(&mut self, init: *mut VMFuncRef) -> Result<(), Trap>
Initializes the contents of this table to the specified function
sourcepub fn init_funcs(
&mut self,
dst: u32,
items: impl ExactSizeIterator<Item = *mut VMFuncRef>
) -> Result<(), Trap>
pub fn init_funcs( &mut self, dst: u32, items: impl ExactSizeIterator<Item = *mut VMFuncRef> ) -> Result<(), Trap>
Fill table[dst..]
with values from items
Returns a trap error on out-of-bounds accesses.
sourcepub fn fill(
&mut self,
dst: u32,
val: TableElement,
len: u32
) -> Result<(), Trap>
pub fn fill( &mut self, dst: u32, val: TableElement, len: u32 ) -> Result<(), Trap>
Fill table[dst..dst + len]
with val
.
Returns a trap error on out-of-bounds accesses.
sourcepub unsafe fn grow(
&mut self,
delta: u32,
init_value: TableElement,
store: &mut dyn Store
) -> Result<Option<u32>, Error>
pub unsafe fn grow( &mut self, delta: u32, init_value: TableElement, store: &mut dyn Store ) -> Result<Option<u32>, Error>
Grow table by the specified amount of elements.
Returns the previous size of the table if growth is successful.
Returns None
if table can’t be grown by the specified amount of
elements, or if the init_value
is the wrong kind of table element.
Unsafety
Resizing the table can reallocate its internal elements buffer. This
table’s instance’s VMContext
has raw pointers to the elements buffer
that are used by Wasm, and they need to be fixed up before we call into
Wasm again. Failure to do so will result in use-after-free inside Wasm.
Generally, prefer using InstanceHandle::table_grow
, which encapsulates
this unsafety.
sourcepub fn get(&self, index: u32) -> Option<TableElement>
pub fn get(&self, index: u32) -> Option<TableElement>
Get reference to the specified element.
Returns None
if the index is out of bounds.
sourcepub fn set(&mut self, index: u32, elem: TableElement) -> Result<(), ()>
pub fn set(&mut self, index: u32, elem: TableElement) -> Result<(), ()>
Set reference to the specified element.
Errors
Returns an error if index
is out of bounds or if this table type does
not match the element type.
sourcepub unsafe fn copy(
dst_table: *mut Self,
src_table: *mut Self,
dst_index: u32,
src_index: u32,
len: u32
) -> Result<(), Trap>
pub unsafe fn copy( dst_table: *mut Self, src_table: *mut Self, dst_index: u32, src_index: u32, len: u32 ) -> Result<(), Trap>
Copy len
elements from src_table[src_index..]
into dst_table[dst_index..]
.
Errors
Returns an error if the range is out of bounds of either the source or destination tables.
sourcepub fn vmtable(&mut self) -> VMTableDefinition
pub fn vmtable(&mut self) -> VMTableDefinition
Return a VMTableDefinition
for exposing the table to compiled wasm code.