31 Z_DISABLE_COPY_MOVE (Port)
33 using FullDesignationProvider =
38 void set_full_designation_provider (FullDesignationProvider provider)
40 full_designation_provider_ = std::move (provider);
49 full_designation_provider_ = [owner] (
const Port &port) {
50 return owner->get_full_designation_for_port (port);
54 bool is_input ()
const {
return flow_ == PortFlow::Input; }
55 bool is_output ()
const {
return flow_ == PortFlow::Output; }
57 bool is_midi ()
const {
return type_ == PortType::Midi; }
58 bool is_cv ()
const {
return type_ == PortType::CV; }
59 bool is_audio ()
const {
return type_ == PortType::Audio; }
61 utils::Utf8String get_label ()
const {
return label_; }
63 auto get_symbol ()
const {
return sym_; }
64 void set_symbol (
const utils::Utf8String &sym) { sym_ = sym; }
85 virtual void clear_buffer (std::size_t offset, std::size_t nframes) = 0;
93 return full_designation_provider_ (*
this);
96 bool has_label ()
const {
return !label_.empty (); }
97 PortType type ()
const {
return type_; }
98 PortFlow flow ()
const {
return flow_; }
101 Port (utils::Utf8String label, PortType type = {}, PortFlow flow = {});
107 static constexpr auto kTypeId =
"type"sv;
108 static constexpr auto kFlowId =
"flow"sv;
109 static constexpr auto kLabelId =
"label"sv;
110 static constexpr auto kSymbolId =
"symbol"sv;
111 static constexpr auto kPortGroupId =
"portGroup"sv;
112 friend void to_json (nlohmann::json &j,
const Port &p)
114 j[kTypeId] = p.type_;
115 j[kFlowId] = p.flow_;
116 j[kLabelId] = p.label_;
117 j[kSymbolId] = p.sym_;
118 j[kPortGroupId] = p.port_group_;
120 friend void from_json (
const nlohmann::json &j, Port &p)
122 j.at (kTypeId).get_to (p.type_);
123 j.at (kFlowId).get_to (p.flow_);
124 j.at (kLabelId).get_to (p.label_);
125 j.at (kSymbolId).get_to (p.sym_);
126 j.at (kPortGroupId).get_to (p.port_group_);
130 FullDesignationProvider full_designation_provider_ =
131 [
this] (
const Port &port) {
return get_label (); };
134 PortType type_{ PortType::Unknown };
136 PortFlow flow_{ PortFlow::Unknown };
139 utils::Utf8String label_;
146 utils::Utf8String sym_;
149 std::optional<utils::Utf8String> port_group_;
151 BOOST_DESCRIBE_CLASS (
153 (utils::UuidIdentifiableObject<Port>),
156 (label_, sym_, port_group_))
203 std::pair<const PortT *, std::unique_ptr<dsp::PortConnection>>;
208 auto &port_sources ()
const {
return port_sources_; }
213 self.port_sources_.clear ();
214 for (
const auto &source_port : source_ports)
216 self.port_sources_.push_back (
219 std::make_unique<dsp::PortConnection> (
220 source_port->get_uuid (), self.get_uuid (), 1.f,
true,
true)));
230 std::vector<ElementType> port_sources_;