|
| 1 | +/// \file wasmtime/component/instance.hh |
| 2 | + |
| 3 | +#ifndef WASMTIME_COMPONENT_INSTANCE_HH |
| 4 | +#define WASMTIME_COMPONENT_INSTANCE_HH |
| 5 | + |
| 6 | +#include <wasmtime/conf.h> |
| 7 | + |
| 8 | +#ifdef WASMTIME_FEATURE_COMPONENT_MODEL |
| 9 | + |
| 10 | +#include <string_view> |
| 11 | +#include <wasmtime/component/component.hh> |
| 12 | +#include <wasmtime/component/func.hh> |
| 13 | +#include <wasmtime/component/instance.h> |
| 14 | +#include <wasmtime/store.hh> |
| 15 | + |
| 16 | +namespace wasmtime { |
| 17 | +namespace component { |
| 18 | + |
| 19 | +/** |
| 20 | + * \brief Class representing an instantiated WebAssembly component. |
| 21 | + */ |
| 22 | +class Instance { |
| 23 | + wasmtime_component_instance_t instance; |
| 24 | + |
| 25 | +public: |
| 26 | + /// \brief Constructs an Instance from the underlying C API struct. |
| 27 | + explicit Instance(const wasmtime_component_instance_t &inst) |
| 28 | + : instance(inst) {} |
| 29 | + |
| 30 | + /// \brief Looks up an exported item from this instance by name, returning the |
| 31 | + /// index at which it can be found. |
| 32 | + /// |
| 33 | + /// The returned `ExportIndex` references the underlying item within this |
| 34 | + /// instance which can then be accessed via that index specifically. The |
| 35 | + /// `instance` provided as an argument to this function is the containing |
| 36 | + /// export instance, if any, that `name` is looked up under. |
| 37 | + std::optional<ExportIndex> get_export_index(Store::Context cx, |
| 38 | + const ExportIndex *instance, |
| 39 | + std::string_view name) const { |
| 40 | + wasmtime_component_export_index_t *ret = |
| 41 | + wasmtime_component_instance_get_export_index( |
| 42 | + &this->instance, cx.capi(), instance ? instance->capi() : nullptr, |
| 43 | + name.data(), name.size()); |
| 44 | + if (ret == nullptr) { |
| 45 | + return std::nullopt; |
| 46 | + } |
| 47 | + return ExportIndex(ret); |
| 48 | + } |
| 49 | + |
| 50 | + /// \brief Looks up an exported function by its export index. |
| 51 | + std::optional<Func> get_func(Store::Context cx, |
| 52 | + const ExportIndex &index) const { |
| 53 | + wasmtime_component_func_t ret; |
| 54 | + bool found = wasmtime_component_instance_get_func(&instance, cx.capi(), |
| 55 | + index.capi(), &ret); |
| 56 | + if (!found) |
| 57 | + return std::nullopt; |
| 58 | + return Func(ret); |
| 59 | + } |
| 60 | + |
| 61 | + /// \brief Returns the underlying C API pointer. |
| 62 | + const wasmtime_component_instance_t *capi() const { return &instance; } |
| 63 | +}; |
| 64 | + |
| 65 | +} // namespace component |
| 66 | +} // namespace wasmtime |
| 67 | + |
| 68 | +#endif // WASMTIME_FEATURE_COMPONENT_MODEL |
| 69 | + |
| 70 | +#endif // WASMTIME_COMPONENT_INSTANCE_H |
0 commit comments