Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
rmlui_importer_adapter.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <memory>
6#include <string>
7#include <string_view>
8
9namespace pulp::view::rmlui {
10
12 bool host_bridge_active = false;
13 bool lua_initialised = false;
14 bool elements_registered = false;
15 bool product_callbacks = false;
16};
17
18// Public importer handoff. It deliberately does not construct RmlUi, expose a
19// Lua state, or access private product/ROM types. The importer supplies public
20// capability providers and receives a typed receipt only after activation.
21class ImporterAdapter final {
22 public:
23 ImporterAdapter() = default;
24 ~ImporterAdapter() = default;
27
28 HostStatus bind_lua(std::shared_ptr<LuaHost> host) noexcept {
29 return bridge_.bind_lua(std::move(host));
30 }
31 HostStatus bind_elements(std::shared_ptr<ElementHost> host) noexcept {
32 return bridge_.bind_elements(std::move(host));
33 }
34 HostStatus bind_product(std::shared_ptr<ProductHost> host) noexcept {
35 return bridge_.bind_product(std::move(host));
36 }
38 const auto status = bridge_.activate();
39 if (status == HostStatus::ok) {
40 receipt_.host_bridge_active = true;
41 receipt_.lua_initialised = true;
42 receipt_.product_callbacks = true;
43 } else {
44 sync_receipt();
45 }
46 return status;
47 }
49 const auto status = bridge_.register_element(std::move(registration));
50 if (status == HostStatus::ok)
51 receipt_.elements_registered = true;
52 sync_receipt();
53 return status;
54 }
56 const auto status = bridge_.dispatch_product(std::move(event));
57 sync_receipt();
58 return status;
59 }
60 void close() noexcept {
61 bridge_.close();
62 receipt_ = {};
63 }
64 [[nodiscard]] const ImporterCapabilityReceipt& receipt() const noexcept {
65 return receipt_;
66 }
67
68 private:
69 void sync_receipt() noexcept {
70 // HostBridge quarantines itself when a provider throws. The receipt is
71 // the importer’s typed capability proof, so it must never continue to
72 // advertise a live product/Lua graph after that boundary closes.
73 if (!bridge_.active())
74 receipt_ = {};
75 }
76
77 HostBridge bridge_;
78 ImporterCapabilityReceipt receipt_;
79};
80
81} // namespace pulp::view::rmlui
bool active() const noexcept
Definition rmlui_host_bridge.hpp:226
void close() noexcept
Definition rmlui_importer_adapter.hpp:60
HostStatus bind_elements(std::shared_ptr< ElementHost > host) noexcept
Definition rmlui_importer_adapter.hpp:31
const ImporterCapabilityReceipt & receipt() const noexcept
Definition rmlui_importer_adapter.hpp:64
HostStatus bind_lua(std::shared_ptr< LuaHost > host) noexcept
Definition rmlui_importer_adapter.hpp:28
ImporterAdapter & operator=(const ImporterAdapter &)=delete
HostStatus register_element(ElementRegistration registration)
Definition rmlui_importer_adapter.hpp:48
HostStatus activate()
Definition rmlui_importer_adapter.hpp:37
HostStatus dispatch_product(ProductEvent event)
Definition rmlui_importer_adapter.hpp:55
HostStatus bind_product(std::shared_ptr< ProductHost > host) noexcept
Definition rmlui_importer_adapter.hpp:34
ImporterAdapter(const ImporterAdapter &)=delete
Bounded event contracts shared by host ingress and graph-authored nodes.
Definition anticipation_eligibility.hpp:9
Definition rmlui_host_bridge.hpp:12
HostStatus
Definition rmlui_host_bridge.hpp:16
@ ok
Definition rmlui_host_bridge.hpp:17
Definition rmlui_host_bridge.hpp:44
Definition rmlui_importer_adapter.hpp:11
bool lua_initialised
Definition rmlui_importer_adapter.hpp:13
bool elements_registered
Definition rmlui_importer_adapter.hpp:14
bool host_bridge_active
Definition rmlui_importer_adapter.hpp:12
bool product_callbacks
Definition rmlui_importer_adapter.hpp:15
Definition rmlui_host_bridge.hpp:30