Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
signal_graph_subgraph.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <cstdint>
6#include <memory>
7#include <string>
8#include <string_view>
9#include <unordered_map>
10#include <vector>
11
12namespace pulp::host {
13
14class SignalGraph;
15
16// Declarative, immutable subgraph template. The bounded first slice supports
17// built-in Input, Output, and Gain nodes; templates are expanded into the
18// ordinary SignalGraph plan and do not introduce a second scheduler.
20 std::string key;
22 int channels = 1;
23 float gain = 1.0f;
24};
25
32
34 std::string name;
35 std::string node;
37 bool output = false;
39};
40
42 std::string path;
43 std::string node;
44 float default_value = 0.0f;
45 float minimum = 0.0f;
46 float maximum = 1.0f;
47};
48
49struct SubgraphTemplate;
50
51// A child is another immutable template expanded as part of its parent. The
52// child key is the stable namespace used for its exposed ports and parameter
53// paths (for example, `filter.gain`). A shared pointer keeps the declaration
54// value-owned while allowing recursive template types without a second graph
55// runtime or a pointer into a temporary object.
57 std::string key;
58 std::shared_ptr<const SubgraphTemplate> definition;
59 std::uint32_t instance_index = 0;
60};
61
63 std::string identity;
64 std::vector<SubgraphNodeSpec> nodes;
65 std::vector<SubgraphEdgeSpec> edges;
66 std::vector<SubgraphPortSpec> exposed_ports;
67 std::vector<SubgraphParameterSpec> parameters;
68 std::vector<SubgraphChildSpec> children;
69};
70
72 std::string template_identity;
73 std::string instance_identity;
74 std::uint32_t instance_index = 0;
75 std::unordered_map<std::string, float> parameters;
76 std::unordered_map<std::string, std::string> child_template_identities;
77 std::unordered_map<std::string, std::uint32_t> child_instance_indices;
78};
79
81 float minimum = 0.0f;
82 float maximum = 1.0f;
83};
84
86 std::string template_identity;
87 std::string instance_identity;
88 std::uint32_t instance_index = 0;
89 std::vector<NodeId> nodes;
90 std::unordered_map<std::string, PortHandle> ports;
91 std::unordered_map<std::string, float> parameters;
92 std::unordered_map<std::string, NodeId> parameter_nodes;
93 std::unordered_map<std::string, SubgraphParameterBounds> parameter_bounds;
94 std::unordered_map<std::string, std::string> child_template_identities;
95 std::unordered_map<std::string, std::uint32_t> child_instance_indices;
96
98};
99
103
104 explicit operator bool() const noexcept {
105 return static_cast<bool>(result);
106 }
107};
108
109// Expand one template instance into graph-owned nodes and edges. Expansion is
110// immutable with respect to the template. Child templates are recursively
111// flattened into the same ordinary SignalGraph plan; their exposed names and
112// parameter paths are namespaced by the child key. Any failure (node, edge,
113// port, child, or parameter declaration) rolls back every node and clears
114// every instance entry created by this call, so a failed result holds no
115// NodeIds. Exposed port names and parameter paths must be unique, parameter
116// bounds must be finite, and each parameter must target a distinct gain node.
117// Diagnostics name the subgraph boundary.
119 std::string instance_identity,
120 std::uint32_t instance_index = 0);
121
122// Connect two exposed ports without reaching into the instance's node handles.
123// The source must be an exposed output and the destination an exposed input of
124// the same kind. Validation happens before graph mutation; graph-level cycle,
125// duplicate, and stale-handle failures are returned with a subgraph boundary
126// diagnostic.
128 std::string_view source_port,
129 const SubgraphInstance& destination,
130 std::string_view destination_port);
131
132// Restore only declared parameter paths. Identity and node topology remain
133// stable. Every entry is validated (known path, finite value within the
134// declared [minimum, maximum], live gain target) before any is applied, so a
135// rejected restore leaves the instance and graph unchanged.
137 const SubgraphState& state);
138
139} // namespace pulp::host
Definition signal_graph_runtime.hpp:83
Definition graph_runtime_buffer_assignment.hpp:8
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
PortKind
Definition signal_graph_node.hpp:34
@ Audio
Definition signal_graph_node.hpp:34
SubgraphExpansionResult instantiate_subgraph(SignalGraph &graph, const SubgraphTemplate &definition, std::string instance_identity, std::uint32_t instance_index=0)
NodeType
Definition signal_graph_node.hpp:21
@ Gain
Definition signal_graph_node.hpp:25
GraphResult connect_subgraph_ports(SignalGraph &graph, const SubgraphInstance &source, std::string_view source_port, const SubgraphInstance &destination, std::string_view destination_port)
GraphResult restore_subgraph_state(SignalGraph &graph, SubgraphInstance &instance, const SubgraphState &state)
SequencerStateChannel is the audio-safe transport for a plugin's structured NON-parameter state: the ...
Definition audio_device_manager.hpp:48
Definition signal_graph_node.hpp:46
Definition signal_graph_subgraph.hpp:56
std::uint32_t instance_index
Definition signal_graph_subgraph.hpp:59
std::string key
Definition signal_graph_subgraph.hpp:57
std::shared_ptr< const SubgraphTemplate > definition
Definition signal_graph_subgraph.hpp:58
Definition signal_graph_subgraph.hpp:26
std::string source
Definition signal_graph_subgraph.hpp:27
std::string destination
Definition signal_graph_subgraph.hpp:29
PortIndex destination_port
Definition signal_graph_subgraph.hpp:30
PortIndex source_port
Definition signal_graph_subgraph.hpp:28
Definition signal_graph_subgraph.hpp:100
GraphResult result
Definition signal_graph_subgraph.hpp:101
SubgraphInstance instance
Definition signal_graph_subgraph.hpp:102
Definition signal_graph_subgraph.hpp:85
std::unordered_map< std::string, PortHandle > ports
Definition signal_graph_subgraph.hpp:90
std::uint32_t instance_index
Definition signal_graph_subgraph.hpp:88
std::string template_identity
Definition signal_graph_subgraph.hpp:86
std::unordered_map< std::string, SubgraphParameterBounds > parameter_bounds
Definition signal_graph_subgraph.hpp:93
std::unordered_map< std::string, NodeId > parameter_nodes
Definition signal_graph_subgraph.hpp:92
std::unordered_map< std::string, std::string > child_template_identities
Definition signal_graph_subgraph.hpp:94
std::vector< NodeId > nodes
Definition signal_graph_subgraph.hpp:89
std::unordered_map< std::string, std::uint32_t > child_instance_indices
Definition signal_graph_subgraph.hpp:95
std::unordered_map< std::string, float > parameters
Definition signal_graph_subgraph.hpp:91
std::string instance_identity
Definition signal_graph_subgraph.hpp:87
SubgraphState save_state() const
Definition signal_graph_subgraph.hpp:19
std::string key
Definition signal_graph_subgraph.hpp:20
float gain
Definition signal_graph_subgraph.hpp:23
NodeType type
Definition signal_graph_subgraph.hpp:21
int channels
Definition signal_graph_subgraph.hpp:22
Definition signal_graph_subgraph.hpp:80
float minimum
Definition signal_graph_subgraph.hpp:81
float maximum
Definition signal_graph_subgraph.hpp:82
Definition signal_graph_subgraph.hpp:41
float maximum
Definition signal_graph_subgraph.hpp:46
std::string node
Definition signal_graph_subgraph.hpp:43
std::string path
Definition signal_graph_subgraph.hpp:42
float minimum
Definition signal_graph_subgraph.hpp:45
float default_value
Definition signal_graph_subgraph.hpp:44
Definition signal_graph_subgraph.hpp:33
std::string node
Definition signal_graph_subgraph.hpp:35
PortKind kind
Definition signal_graph_subgraph.hpp:38
PortIndex port
Definition signal_graph_subgraph.hpp:36
std::string name
Definition signal_graph_subgraph.hpp:34
bool output
Definition signal_graph_subgraph.hpp:37
Definition signal_graph_subgraph.hpp:71
std::unordered_map< std::string, std::uint32_t > child_instance_indices
Definition signal_graph_subgraph.hpp:77
std::unordered_map< std::string, float > parameters
Definition signal_graph_subgraph.hpp:75
std::string template_identity
Definition signal_graph_subgraph.hpp:72
std::uint32_t instance_index
Definition signal_graph_subgraph.hpp:74
std::string instance_identity
Definition signal_graph_subgraph.hpp:73
std::unordered_map< std::string, std::string > child_template_identities
Definition signal_graph_subgraph.hpp:76
Definition signal_graph_subgraph.hpp:62
std::vector< SubgraphChildSpec > children
Definition signal_graph_subgraph.hpp:68
std::vector< SubgraphParameterSpec > parameters
Definition signal_graph_subgraph.hpp:67
std::vector< SubgraphEdgeSpec > edges
Definition signal_graph_subgraph.hpp:65
std::vector< SubgraphPortSpec > exposed_ports
Definition signal_graph_subgraph.hpp:66
std::vector< SubgraphNodeSpec > nodes
Definition signal_graph_subgraph.hpp:64
std::string identity
Definition signal_graph_subgraph.hpp:63