Loading...
Searching...
No Matches
Factories.hpp
1#pragma once
2#include <Process/Dataflow/ControlWidgets.hpp>
3
4#include <Crousti/Executor.hpp>
5#include <Crousti/Layer.hpp>
6#include <Crousti/ProcessModel.hpp>
7#include <Crousti/ScoreLayer.hpp>
8#include <Dataflow/WidgetInletFactory.hpp>
9
10#include <ossia/detail/for_each.hpp>
11
12#include <Avnd/Controls.hpp>
13
14namespace oscr
15{
16template <typename Node>
17struct ProcessFactory final : public Process::ProcessFactory_T<oscr::ProcessModel<Node>>
18{
20};
21
22template <typename Node>
23struct ExecutorFactory final
24 : public Execution::ProcessComponentFactory_T<oscr::Executor<Node>>
25{
27 oscr::Executor<Node>>::ProcessComponentFactory_T;
28};
29
30template <typename Node>
31static void instantiate_fx(
32 std::vector<score::InterfaceBase*>& v,
34{
35 if(key == Execution::ProcessComponentFactory::static_interfaceKey())
36 {
37 //static_assert((requires { std::declval<Nodes>().run({}, {}); } && ...));
38 v.emplace_back(
41 }
42 else if(key == Process::ProcessModelFactory::static_interfaceKey())
43 {
44 v.emplace_back(
46 }
47 else if(key == Process::LayerFactory::static_interfaceKey())
48 {
49 if constexpr(avnd::has_ui<Node>)
50 {
51 v.emplace_back(
53 }
54 else if constexpr(oscr::has_ossia_layer<Node>)
55 {
56 v.emplace_back(
58 }
59 }
60 else if(key == Process::PortFactory::static_interfaceKey())
61 {
62 // Go through all the process's control inputs with a mapper
63 // Generate the matching WidgetInletFactory
64 using namespace boost::mp11;
65
66 auto fun = [&]<typename N, typename... Fields>(avnd::typelist<Fields...>) {
67 (v.emplace_back(
68 static_cast<Process::PortFactory*>(new CustomControlFactory<N, Fields>{})),
69 ...);
70 };
71 fun.template operator()<Node>(reflect_mapped_controls<Node>{});
72 fun.template operator()<Node>(reflect_controller_controls<Node>{});
73 }
74}
75
76template <typename T>
77void custom_factories(
78 std::vector<score::InterfaceBase*>& fx,
79 const score::ApplicationContext& ctx, const score::InterfaceKey& key);
80
81}
82
83namespace Avnd = oscr;
Definition Process/Execution/ProcessComponent.hpp:131
Definition Process/Execution/ProcessComponent.hpp:114
Definition score-lib-process/Process/ProcessFactory.hpp:59
Definition PortFactory.hpp:30
Definition GenericProcessFactory.hpp:15
The ProcessFactory class.
Definition score-lib-process/Process/ProcessFactory.hpp:35
Definition UuidKey.hpp:345
Definition score-plugin-avnd/Crousti/Executor.hpp:116
Definition score-plugin-avnd/Crousti/Layer.hpp:553
Definition score-plugin-avnd/Crousti/ProcessModel.hpp:88
Definition ScoreLayer.hpp:11
Definition Metadatas.hpp:37
TreeNode< DeviceExplorerNode > Node
Definition DeviceNode.hpp:74
Definition Controls.hpp:27
Definition Factories.hpp:25
Definition Factories.hpp:18
Used to access all the application-wide state and structures.
Definition ApplicationContext.hpp:25