Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
sample_region_parameters.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <memory>
7#include <span>
8#include <string>
9#include <vector>
10
11namespace pulp::host {
12
15
23
24// Value-owned parameter metadata derived from authored sample regions. A
25// candidate contract contains promoted parameters only; freeze() combines it
26// with the Processor's ordinary manifest and validates the whole surface before
27// any StateStore registration can occur.
29 public:
31
33 from_regions(std::span<const SampleRegionDefinition> regions);
34
36 freeze(std::span<const state::ParamInfo> ordinary_parameters) const;
37
38 bool valid() const noexcept {
39 return valid_;
40 }
41 bool frozen() const noexcept {
42 return frozen_;
43 }
44 const std::string& error() const noexcept {
45 return error_;
46 }
47 std::span<const SampleRegionParameterContractEntry> entries() const noexcept {
48 return entries_;
49 }
50 std::span<const state::ParamInfo> promoted_parameters() const noexcept {
51 return promoted_parameters_;
52 }
53 std::span<const state::ParamInfo> parameters() const noexcept {
54 return parameters_;
55 }
56 bool matches_promoted(const SampleRegionParameterContract& other) const noexcept;
57
58 std::unique_ptr<SampleRegionParameterBinding> bind(state::StateStore& store) const;
59
60 private:
63
64 // std::function has no general value equality. Empty callbacks and plain
65 // function pointers are compared exactly; other callable objects use their
66 // concrete target type as the stable metadata boundary.
67 bool store_equal_(const state::StateStore& store) const noexcept;
68
69 bool valid_ = false;
70 bool frozen_ = false;
71 std::string error_ = "parameter contract has not been constructed";
72 std::vector<SampleRegionParameterContractEntry> entries_;
73 std::vector<state::ParamInfo> promoted_parameters_;
74 std::vector<state::ParamInfo> parameters_;
75};
76
77// Non-owning link between an immutable contract and its StateStore. The
78// SampleRegionParameterOwner that supplies it must outlive the binding and
79// every graph or prepared edit to which that binding is attached.
81 public:
86
87 const SampleRegionParameterContract& contract() const noexcept {
88 return *contract_;
89 }
90 const state::StateStore& store() const noexcept {
91 return *store_;
92 }
94 return *store_;
95 }
96 float value(state::ParamID id) const noexcept {
97 return store_->get_value(id);
98 }
99
100 private:
103 state::StateStore& store) noexcept
104 : contract_(&contract), store_(&store) {}
105
106 const SampleRegionParameterContract* contract_ = nullptr;
107 state::StateStore* store_ = nullptr;
108};
109
110// Owns the unpublished store, frozen manifest, and borrowed binding as one
111// construction unit. create() returns null before anything can be published if
112// validation or registration construction fails.
114 public:
117
118 static std::unique_ptr<SampleRegionParameterOwner>
119 create(std::span<const state::ParamInfo> ordinary_parameters,
120 const SampleRegionParameterContract& promoted_contract) noexcept;
121
122 const SampleRegionParameterContract& contract() const noexcept {
123 return contract_;
124 }
125 const SampleRegionParameterBinding& binding() const noexcept {
126 return *binding_;
127 }
129 return store_;
130 }
131 const state::StateStore& store() const noexcept {
132 return store_;
133 }
134
135 private:
137 : contract_(std::move(contract)) {}
138
139 // Destruction order is binding, store, contract. The borrowed pointers are
140 // therefore never observable after either owner has gone away.
141 SampleRegionParameterContract contract_;
142 state::StateStore store_;
143 std::unique_ptr<SampleRegionParameterBinding> binding_;
144};
145
146} // namespace pulp::host
Definition sample_region_parameters.hpp:80
SampleRegionParameterBinding & operator=(SampleRegionParameterBinding &&)=delete
float value(state::ParamID id) const noexcept
Definition sample_region_parameters.hpp:96
SampleRegionParameterBinding(const SampleRegionParameterBinding &)=delete
SampleRegionParameterBinding(SampleRegionParameterBinding &&)=delete
SampleRegionParameterBinding & operator=(const SampleRegionParameterBinding &)=delete
const SampleRegionParameterContract & contract() const noexcept
Definition sample_region_parameters.hpp:87
state::StateStore & store() noexcept
Definition sample_region_parameters.hpp:93
friend class SampleRegionParameterContract
Definition sample_region_parameters.hpp:101
const state::StateStore & store() const noexcept
Definition sample_region_parameters.hpp:90
Definition sample_region_parameters.hpp:28
std::unique_ptr< SampleRegionParameterBinding > bind(state::StateStore &store) const
friend class SampleRegionParameterBinding
Definition sample_region_parameters.hpp:61
const std::string & error() const noexcept
Definition sample_region_parameters.hpp:44
static SampleRegionParameterContract from_regions(std::span< const SampleRegionDefinition > regions)
bool valid() const noexcept
Definition sample_region_parameters.hpp:38
std::span< const SampleRegionParameterContractEntry > entries() const noexcept
Definition sample_region_parameters.hpp:47
bool matches_promoted(const SampleRegionParameterContract &other) const noexcept
SampleRegionParameterContract freeze(std::span< const state::ParamInfo > ordinary_parameters) const
std::span< const state::ParamInfo > promoted_parameters() const noexcept
Definition sample_region_parameters.hpp:50
std::span< const state::ParamInfo > parameters() const noexcept
Definition sample_region_parameters.hpp:53
bool frozen() const noexcept
Definition sample_region_parameters.hpp:41
friend class SampleRegionParameterOwner
Definition sample_region_parameters.hpp:62
Definition sample_region_parameters.hpp:113
const SampleRegionParameterBinding & binding() const noexcept
Definition sample_region_parameters.hpp:125
const state::StateStore & store() const noexcept
Definition sample_region_parameters.hpp:131
state::StateStore & store() noexcept
Definition sample_region_parameters.hpp:128
static std::unique_ptr< SampleRegionParameterOwner > create(std::span< const state::ParamInfo > ordinary_parameters, const SampleRegionParameterContract &promoted_contract) noexcept
SampleRegionParameterOwner(const SampleRegionParameterOwner &)=delete
SampleRegionParameterOwner & operator=(const SampleRegionParameterOwner &)=delete
const SampleRegionParameterContract & contract() const noexcept
Definition sample_region_parameters.hpp:122
Centralized parameter storage with lock-free value access.
Definition store.hpp:164
std::uint32_t NodeId
Definition graph_types.hpp:7
std::uint32_t PortIndex
Definition graph_types.hpp:8
Bounded event contracts shared by host ingress and graph-authored nodes.
Definition anticipation_eligibility.hpp:9
std::uint32_t SampleRegionId
Definition sample_region_proof.hpp:13
uint32_t ParamID
Unique parameter identifier, stable across plugin versions.
Definition parameter.hpp:55
STL namespace.
Definition sample_region_parameters.hpp:16
state::ParamInfo info
Definition sample_region_parameters.hpp:21
std::string key
Definition sample_region_parameters.hpp:18
SampleRegionId region_id
Definition sample_region_parameters.hpp:17
NodeId bound_node_id
Definition sample_region_parameters.hpp:19
PortIndex bound_port
Definition sample_region_parameters.hpp:20
Immutable parameter metadata, registered once at plugin initialization.
Definition parameter.hpp:316