5#ifndef WASMTIME_STORE_HH
6#define WASMTIME_STORE_HH
14#include <wasmtime/helpers.hh>
46 static void finalizer(
void *ptr) {
47 std::unique_ptr<std::any> _ptr(
static_cast<std::any *
>(ptr));
104 if (error !=
nullptr) {
107 return std::monostate();
116 if (error !=
nullptr) {
126 ptr, std::make_unique<std::any>(std::move(data)).release());
134#ifdef WASMTIME_FEATURE_WASI
142 if (error !=
nullptr) {
145 return std::monostate();
196 void limiter(int64_t memory_size, int64_t table_elements, int64_t instances,
197 int64_t tables, int64_t memories) {
213 template <
typename F,
214 std::enable_if_t<std::is_invocable_r_v<Result<DeadlineKind>, F,
215 Context, uint64_t &>,
219 ptr.get(), raw_epoch_callback<std::remove_reference_t<F>>,
220 std::make_unique<std::remove_reference_t<F>>(std::forward<F>(f))
222 raw_epoch_finalizer<std::remove_reference_t<F>>);
233 template <
typename F>
236 uint64_t *epoch_deadline_delta,
238 auto &callback = *
static_cast<F *
>(data);
240 auto result = callback(ctx, *epoch_deadline_delta);
243 return result.err().capi_release();
249 template <
typename F>
static void raw_epoch_finalizer(
void *data) {
250 std::unique_ptr<F> _ptr(
static_cast<F *
>(data));
Representation of a WebAssembly anyref value.
Definition: val.hh:105
Structure provided to host functions to lookup caller information or acquire a Store::Context.
Definition: func.hh:28
Global compilation state in Wasmtime.
Definition: engine.hh:22
Errors coming from Wasmtime.
Definition: error.hh:26
Representation of a WebAssembly externref value.
Definition: val.hh:28
Representation of a WebAssembly function.
Definition: func.hh:336
A WebAssembly global.
Definition: global.hh:28
A WebAssembly instance.
Definition: instance.hh:31
Helper class for linking modules together with name-based resolution.
Definition: linker.hh:26
A WebAssembly linear memory.
Definition: memory.hh:27
Fallible result type used for Wasmtime.
Definition: error.hh:70
An interior pointer into a Store.
Definition: store.hh:66
void gc()
Definition: store.hh:94
void set_epoch_deadline(uint64_t ticks_beyond_current)
Definition: store.hh:155
Result< std::monostate > set_wasi(WasiConfig config)
Definition: store.hh:140
Context(wasmtime_context_t *ptr)
Creates a context from the raw C API pointer.
Definition: store.hh:81
Result< std::monostate > set_fuel(uint64_t fuel)
Definition: store.hh:102
Context(Store &store)
Creates a context referencing the provided Store.
Definition: store.hh:84
void set_data(std::any data) const
Set user specified data associated with this store.
Definition: store.hh:123
Result< uint64_t > get_fuel() const
Definition: store.hh:113
std::any & get_data() const
Get user specified data associated with this store.
Definition: store.hh:130
Context(Store *store)
Creates a context referencing the provided Store.
Definition: store.hh:86
const wasmtime_context_t * capi() const
Returns the underlying C API pointer.
Definition: store.hh:160
wasmtime_context_t * capi()
Returns the underlying C API pointer.
Definition: store.hh:163
Owner of all WebAssembly objects.
Definition: store.hh:42
void epoch_deadline_callback(F &&f)
Configures epoch deadline callback to C function.
Definition: store.hh:217
Store(Engine &engine)
Creates a new Store within the provided Engine.
Definition: store.hh:52
Context context()
Explicit function to acquire a Context from this store.
Definition: store.hh:226
void limiter(int64_t memory_size, int64_t table_elements, int64_t instances, int64_t tables, int64_t memories)
Provides limits for a store. Used by hosts to limit resource consumption of instances....
Definition: store.hh:196
void gc()
Definition: store.hh:230
A WebAssembly table.
Definition: table.hh:31
Representation of a generic WebAssembly value.
Definition: val.hh:204
Configuration for an instance of WASI.
Definition: wasi.hh:24
Build-time defines for how the C API was built.
WASM_API_EXTERN void wasmtime_context_gc(wasmtime_context_t *context)
Perform garbage collection within the given context.
WASM_API_EXTERN void wasmtime_store_limiter(wasmtime_store_t *store, int64_t memory_size, int64_t table_elements, int64_t instances, int64_t tables, int64_t memories)
Provides limits for a store. Used by hosts to limit resource consumption of instances....
WASM_API_EXTERN void wasmtime_context_set_epoch_deadline(wasmtime_context_t *context, uint64_t ticks_beyond_current)
Configures the relative deadline at which point WebAssembly code will trap or invoke the callback fun...
uint8_t wasmtime_update_deadline_kind_t
An enum for the behavior before extending the epoch deadline.
Definition: store.h:212
#define WASMTIME_UPDATE_DEADLINE_CONTINUE
Directly continue to updating the deadline and executing WebAssembly.
Definition: store.h:214
WASM_API_EXTERN void wasmtime_store_epoch_deadline_callback(wasmtime_store_t *store, wasmtime_error_t *(*func)(wasmtime_context_t *context, void *data, uint64_t *epoch_deadline_delta, wasmtime_update_deadline_kind_t *update_kind), void *data, void(*finalizer)(void *))
Configures epoch deadline callback to C function.
WASM_API_EXTERN wasmtime_error_t * wasmtime_context_set_wasi(wasmtime_context_t *context, wasi_config_t *wasi)
Configures WASI state within the specified store.
WASM_API_EXTERN wasmtime_error_t * wasmtime_context_get_fuel(const wasmtime_context_t *context, uint64_t *fuel)
Returns the amount of fuel remaining in this context's store.
WASM_API_EXTERN void wasmtime_context_set_data(wasmtime_context_t *context, void *data)
Overwrites the user-specified data associated with this store.
WASM_API_EXTERN wasmtime_error_t * wasmtime_context_set_fuel(wasmtime_context_t *store, uint64_t fuel)
Set fuel to this context's store for wasm to consume while executing.
WASM_API_EXTERN wasmtime_context_t * wasmtime_store_context(wasmtime_store_t *store)
Returns the interior wasmtime_context_t pointer to this store.
#define WASMTIME_UPDATE_DEADLINE_YIELD
Yield control (via async support) then update the deadline.
Definition: store.h:216
WASM_API_EXTERN void * wasmtime_context_get_data(const wasmtime_context_t *context)
Returns the user-specified data associated with the specified store.
WASM_API_EXTERN wasmtime_store_t * wasmtime_store_new(wasm_engine_t *engine, void *data, void(*finalizer)(void *))
Creates a new store within the specified engine.
DeadlineKind
An enum for the behavior before extending the epoch deadline.
Definition: store.hh:23
@ Yield
Yield control (via async support) then update the deadline.
@ Continue
Directly continue to updating the deadline and executing WebAssembly.
An interior pointer into a wasmtime_store_t which is used as "context" for many functions.
Errors generated by Wasmtime.
Storage of WebAssembly objects.