76 std::vector<Process::PortType> port;
77 void audio() { port.push_back(Process::PortType::Audio); }
78 void midi() { port.push_back(Process::PortType::Midi); }
79 void value() { port.push_back(Process::PortType::Message); }
80 void buffer() { port.push_back(Process::PortType::Texture); }
81 void texture() { port.push_back(Process::PortType::Texture); }
82 void geometry() { port.push_back(Process::PortType::Geometry); }
84 template <std::
size_t N, oscr::ossia_value_port Port>
85 void operator()(
const avnd::field_reflection<N, Port>)
89 template <std::
size_t N, oscr::ossia_audio_port Port>
90 void operator()(
const avnd::field_reflection<N, Port>)
95 template <std::
size_t N, oscr::ossia_m
idi_port Port>
96 void operator()(
const avnd::field_reflection<N, Port>)
101 template <std::
size_t N, avnd::dynamic_ports_port Port>
102 void operator()(
const avnd::field_reflection<N, Port>)
104 using port_type =
typename decltype(std::declval<Port>().ports)::value_type;
105 (*this)(avnd::field_reflection<std::size_t{0}, port_type>{});
108 template <std::
size_t N, avnd::audio_port Port>
109 void operator()(
const avnd::field_reflection<N, Port>)
114 template <std::
size_t N, avnd::m
idi_port Port>
115 void operator()(
const avnd::field_reflection<N, Port>)
120 template <std::
size_t N, avnd::parameter Port>
121 requires(!oscr::ossia_port<Port> && !avnd::curve_port<Port>)
122 void operator()(
const avnd::field_reflection<N, Port>)
127 template <std::
size_t N, avnd::file_port Port>
128 void operator()(
const avnd::field_reflection<N, Port>)
133 template <std::
size_t N, avnd::soundfile_port Port>
134 void operator()(
const avnd::field_reflection<N, Port>)
139 template <std::
size_t N, avnd::m
idifile_port Port>
140 void operator()(
const avnd::field_reflection<N, Port>)
145 template <std::
size_t N, avnd::buffer_port Port>
146 void operator()(
const avnd::field_reflection<N, Port>)
151 template <std::
size_t N, avnd::texture_port Port>
152 void operator()(
const avnd::field_reflection<N, Port>)
157 template <std::
size_t N, avnd::geometry_port Port>
158 void operator()(
const avnd::field_reflection<N, Port>)
163 template <std::
size_t N, avnd::curve_port Port>
164 void operator()(
const avnd::field_reflection<N, Port>)
169 template <std::
size_t N, avnd::callback Port>
170 void operator()(
const avnd::field_reflection<N, Port>)
175 void operator()(
auto&&) =
delete;
181 static std::vector<Process::PortType> inletDescription()
184 avnd::input_introspection<Info>::for_all(vis);
187 static std::vector<Process::PortType> outletDescription()
190 avnd::output_introspection<Info>::for_all(vis);
193 static Process::ProcessCategory kind()
noexcept
195 Process::ProcessCategory cat;
199 cat = Process::ProcessCategory::Other;
201 if constexpr(avnd::tag_deprecated<Info>)
202 cat = Process::ProcessCategory(cat | Process::ProcessCategory::Deprecated);
209#define if_exists(Expr, Else) \
216#define if_attribute(Attr) QString{}
218#define if_exists(Expr, Else) \
220 if constexpr(requires { Expr; }) \
225#define if_attribute(Attr) \
226 []() noexcept -> QString { \
227 if constexpr(avnd::has_##Attr<Info>) \
228 return oscr::fromStringView(avnd::get_##Attr<Info>()); \
236 if_attribute(category),
237 if_attribute(description),
238 if_attribute(author),
242 if_attribute(manual_url)};