Struct ArrayRefPre
pub struct ArrayRefPre { /* private fields */ }
Expand description
An allocator for a particular Wasm GC array type.
Every ArrayRefPre
is associated with a particular Store
and a particular ArrayType
.
Reusing an allocator across many allocations amortizes some per-type runtime
overheads inside Wasmtime. An ArrayRefPre
is to ArrayRef
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 an array type.
let array_ty = ArrayType::new(
store.engine(),
FieldType::new(Mutability::Var, ValType::I32.into()),
);
// Create an allocator for the array type.
let allocator = ArrayRefPre::new(&mut store, array_ty);
{
let mut scope = RootScope::new(&mut store);
// Allocate a bunch of instances of our array 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 {
let len = 42;
let elem = Val::I32(36);
ArrayRef::new(&mut scope, &allocator, &elem, len)?;
}
}
Implementations§
§impl ArrayRefPre
impl ArrayRefPre
pub fn new(store: impl AsContextMut, ty: ArrayType) -> ArrayRefPre
pub fn new(store: impl AsContextMut, ty: ArrayType) -> ArrayRefPre
Create a new ArrayRefPre
that is associated with the given store
and type.
Auto Trait Implementations§
impl Freeze for ArrayRefPre
impl !RefUnwindSafe for ArrayRefPre
impl Send for ArrayRefPre
impl Sync for ArrayRefPre
impl Unpin for ArrayRefPre
impl !UnwindSafe for ArrayRefPre
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