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 texture() { port.push_back(Process::PortType::Texture); }
86 void geometry() { port.push_back(Process::PortType::Geometry); }
88 template <std::
size_t N, oscr::ossia_value_port Port>
89 void operator()(
const avnd::field_reflection<N, Port>)
93 template <std::
size_t N, oscr::ossia_audio_port Port>
94 void operator()(
const avnd::field_reflection<N, Port>)
99 template <std::
size_t N, oscr::ossia_m
idi_port Port>
100 void operator()(
const avnd::field_reflection<N, Port>)
105 template <std::
size_t N, avnd::dynamic_ports_port Port>
106 void operator()(
const avnd::field_reflection<N, Port>)
108 using port_type =
typename decltype(std::declval<Port>().ports)::value_type;
109 (*this)(avnd::field_reflection<std::size_t{0}, port_type>{});
112 template <std::
size_t N, avnd::audio_port Port>
113 void operator()(
const avnd::field_reflection<N, Port>)
118 template <std::
size_t N, avnd::m
idi_port Port>
119 void operator()(
const avnd::field_reflection<N, Port>)
124 template <std::
size_t N, avnd::parameter Port>
125 requires(!oscr::ossia_port<Port>)
126 void operator()(
const avnd::field_reflection<N, Port>)
131 template <std::
size_t N, avnd::file_port Port>
132 void operator()(
const avnd::field_reflection<N, Port>)
137 template <std::
size_t N, avnd::soundfile_port Port>
138 void operator()(
const avnd::field_reflection<N, Port>)
143 template <std::
size_t N, avnd::m
idifile_port Port>
144 void operator()(
const avnd::field_reflection<N, Port>)
149 template <std::
size_t N, avnd::texture_port Port>
150 void operator()(
const avnd::field_reflection<N, Port>)
154 template <std::
size_t N, avnd::geometry_port Port>
155 void operator()(
const avnd::field_reflection<N, Port>)
160 template <std::
size_t N, avnd::curve_port Port>
161 void operator()(
const avnd::field_reflection<N, Port>)
166 template <std::
size_t N, avnd::callback Port>
167 void operator()(
const avnd::field_reflection<N, Port>)
172 void operator()(
auto&&) =
delete;
178 static std::vector<Process::PortType> inletDescription()
181 avnd::input_introspection<Info>::for_all(vis);
184 static std::vector<Process::PortType> outletDescription()
187 avnd::output_introspection<Info>::for_all(vis);
190 static Process::ProcessCategory kind()
noexcept
192 Process::ProcessCategory cat;
196 cat = Process::ProcessCategory::Other;
198 if constexpr(avnd::tag_deprecated<Info>)
199 cat = Process::ProcessCategory(cat | Process::ProcessCategory::Deprecated);
206#define if_exists(Expr, Else) \
213#define if_attribute(Attr) QString{}
215#define if_exists(Expr, Else) \
217 if constexpr(requires { Expr; }) \
222#define if_attribute(Attr) \
223 []() noexcept -> QString { \
224 if constexpr(avnd::has_##Attr<Info>) \
225 return fromStringView(avnd::get_##Attr<Info>()); \
233 if_attribute(category),
234 if_attribute(description),
235 if_attribute(author),
239 if_attribute(manual_url)};