Struct StructRefPre
pub struct StructRefPre { /* private fields */ }
Expand description
An allocator for a particular Wasm GC struct type.
Every StructRefPre
is associated with a particular
Store
and a particular StructType.
Reusing an allocator across many allocations amortizes some per-type runtime
overheads inside Wasmtime. A StructRefPre
is to StructRef
s as an
InstancePre
is to Instance
s.
§Example
use wasmtime::*;
let mut config = Config::new();
config.wasm_function_references(true);
config.wasm_gc(true);
let engine = Engine::new(&config)?;
let mut store = Store::new(&engine, ());
// Define a struct type.
let struct_ty = StructType::new(
store.engine(),
[FieldType::new(Mutability::Var, StorageType::I8)],
)?;
// Create an allocator for the struct type.
let allocator = StructRefPre::new(&mut store, struct_ty);
{
let mut scope = RootScope::new(&mut store);
// Allocate a bunch of instances of our struct type using the same
// allocator! This is faster than creating a new allocator for each
// instance we want to allocate.
for i in 0..10 {
StructRef::new(&mut scope, &allocator, &[Val::I32(i)])?;
}
}
Implementations§
§impl StructRefPre
impl StructRefPre
pub fn new(store: impl AsContextMut, ty: StructType) -> StructRefPre
pub fn new(store: impl AsContextMut, ty: StructType) -> StructRefPre
Create a new StructRefPre
that is associated with the given store
and type.
Auto Trait Implementations§
impl Freeze for StructRefPre
impl !RefUnwindSafe for StructRefPre
impl Send for StructRefPre
impl Sync for StructRefPre
impl Unpin for StructRefPre
impl !UnwindSafe for StructRefPre
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more