81 std::vector<Process::PortType> port;
82 void audio() { port.push_back(Process::PortType::Audio); }
83 void midi() { port.push_back(Process::PortType::Midi); }
84 void value() { port.push_back(Process::PortType::Message); }
85 void buffer() { port.push_back(Process::PortType::Texture); }
86 void texture() { port.push_back(Process::PortType::Texture); }
87 void geometry() { port.push_back(Process::PortType::Geometry); }
89 template <std::
size_t N, oscr::ossia_value_port Port>
90 void operator()(
const avnd::field_reflection<N, Port>)
94 template <std::
size_t N, oscr::ossia_audio_port Port>
95 void operator()(
const avnd::field_reflection<N, Port>)
100 template <std::
size_t N, oscr::ossia_m
idi_port Port>
101 void operator()(
const avnd::field_reflection<N, Port>)
106 template <std::
size_t N, avnd::dynamic_ports_port Port>
107 void operator()(
const avnd::field_reflection<N, Port>)
109 using port_type =
typename decltype(std::declval<Port>().ports)::value_type;
110 (*this)(avnd::field_reflection<std::size_t{0}, port_type>{});
113 template <std::
size_t N, avnd::audio_port Port>
114 void operator()(
const avnd::field_reflection<N, Port>)
119 template <std::
size_t N, avnd::m
idi_port Port>
120 void operator()(
const avnd::field_reflection<N, Port>)
125 template <std::
size_t N, avnd::parameter Port>
126 requires(!oscr::ossia_port<Port> && !avnd::curve_port<Port>)
127 void operator()(
const avnd::field_reflection<N, Port>)
132 template <std::
size_t N, avnd::file_port Port>
133 void operator()(
const avnd::field_reflection<N, Port>)
138 template <std::
size_t N, avnd::soundfile_port Port>
139 void operator()(
const avnd::field_reflection<N, Port>)
144 template <std::
size_t N, avnd::m
idifile_port Port>
145 void operator()(
const avnd::field_reflection<N, Port>)
150 template <std::
size_t N, avnd::buffer_port Port>
151 void operator()(
const avnd::field_reflection<N, Port>)
156 template <std::
size_t N, avnd::texture_port Port>
157 void operator()(
const avnd::field_reflection<N, Port>)
162 template <std::
size_t N, avnd::geometry_port Port>
163 void operator()(
const avnd::field_reflection<N, Port>)
168 template <std::
size_t N, avnd::curve_port Port>
169 void operator()(
const avnd::field_reflection<N, Port>)
174 template <std::
size_t N, avnd::callback Port>
175 void operator()(
const avnd::field_reflection<N, Port>)
180 void operator()(
auto&&) =
delete;
186 static std::vector<Process::PortType> inletDescription()
189 avnd::input_introspection<Info>::for_all(vis);
192 static std::vector<Process::PortType> outletDescription()
195 avnd::output_introspection<Info>::for_all(vis);
198 static Process::ProcessCategory kind()
noexcept
200 Process::ProcessCategory cat;
204 cat = Process::ProcessCategory::Other;
206 if constexpr(avnd::tag_deprecated<Info>)
207 cat = Process::ProcessCategory(cat | Process::ProcessCategory::Deprecated);
214#define if_exists(Expr, Else) \
221#define if_attribute(Attr) QString{}
223#define if_exists(Expr, Else) \
225 if constexpr(requires { Expr; }) \
230#define if_attribute(Attr) \
231 []() noexcept -> QString { \
232 if constexpr(avnd::has_##Attr<Info>) \
233 return fromStringView(avnd::get_##Attr<Info>()); \
241 if_attribute(category),
242 if_attribute(description),
243 if_attribute(author),
247 if_attribute(manual_url)};