Loading...
Searching...
No Matches
AvndJit.hpp
1#pragma once
2#include <Process/Execution/ProcessComponent.hpp>
3#include <Process/GenericProcessFactory.hpp>
4#include <Process/Process.hpp>
5#include <Process/ProcessMetadata.hpp>
6#include <Process/Script/ScriptEditor.hpp>
7
8#include <Scenario/Commands/ScriptEditCommand.hpp>
9
10#include <Control/DefaultEffectItem.hpp>
11#include <Effect/EffectFactory.hpp>
12#include <JitCpp/EditScript.hpp>
13
14#include <ossia/dataflow/execution_state.hpp>
15#include <ossia/dataflow/graph_node.hpp>
16#include <ossia/dataflow/node_process.hpp>
17
18#include <score_plugin_jit_export.h>
19namespace AvndJit
20{
21class Model;
22}
23
24namespace Jit
25{
26struct Driver;
27}
28PROCESS_METADATA(
29 , AvndJit::Model, "193686f2-1f3b-45ce-9251-2e79ca06933b", "Jit", "Avendish",
30 Process::ProcessCategory::Script, "Script", "Avendish compilation process",
31 "ossia score", QStringList{}, {}, {},
32 QUrl(
33 "https://ossia.io/score-docs/development/plugins/"
34 "plugins-with-avendish.html#avendish-documentation"),
36namespace AvndJit
37{
38using NodeCompiler = Jit::Driver;
39using NodeFunction = ossia::graph_node*(int, double);
40using NodeFactory = std::function<NodeFunction>;
41class Model : public Process::ProcessModel
42{
43 friend class JitUI;
44 friend class JitUpdateUI;
45 SCORE_SERIALIZE_FRIENDS
46 PROCESS_METADATA_IMPL(Model)
47
48 W_OBJECT(Model)
49public:
50 Model(
51 TimeVal t, const QString& jitProgram, const Id<Process::ProcessModel>&,
52 QObject* parent);
53 ~Model() override;
54
55 Model(DataStream::Deserializer& vis, QObject* parent);
56 Model(JSONObject::Deserializer& vis, QObject* parent);
57 Model(DataStream::Deserializer&& vis, QObject* parent);
58 Model(JSONObject::Deserializer&& vis, QObject* parent);
59
60 bool validate(const QString& txt) const noexcept;
61
62 const QString& script() const { return m_text; }
63 [[nodiscard]] Process::ScriptChangeResult setScript(const QString& txt);
64 void scriptChanged(const QString& txt) W_SIGNAL(scriptChanged, txt);
65 void programChanged() W_SIGNAL(programChanged);
66
67 QString prettyName() const noexcept override;
68
69 std::shared_ptr<NodeFactory> factory;
70
71 void errorMessage(int line, const QString& e) W_SIGNAL(errorMessage, line, e);
72 PROPERTY(QString, script READ script WRITE setScript NOTIFY scriptChanged)
73private:
74 std::shared_ptr<NodeFactory> getJitFactory();
75
76 QString effect() const noexcept override;
77 void loadPreset(const Process::Preset& preset) override;
78 Process::Preset savePreset() const noexcept override;
79
80 void init();
81 [[nodiscard]] Process::ScriptChangeResult reload();
82 QString m_text;
83 std::unique_ptr<NodeCompiler> m_compiler;
84};
85
86struct LanguageSpec
87{
88 static constexpr const char* language = "C++";
89};
90
92using LayerFactory = Process::ScriptLayerFactory_T<
94}
95
96namespace Process
97{
98template <>
99QString EffectProcessFactory_T<AvndJit::Model>::customConstructionData() const noexcept;
100
101template <>
102Process::Descriptor
103EffectProcessFactory_T<AvndJit::Model>::descriptor(QString d) const noexcept;
104
105template <>
106Process::Descriptor EffectProcessFactory_T<AvndJit::Model>::descriptor(
107 const Process::ProcessModel& d) const noexcept;
108}
109
110namespace AvndJit
111{
112class Executor final
113 : public Execution::ProcessComponent_T<AvndJit::Model, ossia::node_process>
114{
115 COMPONENT_METADATA("086fbfcf-44e9-4ea6-baad-b4f76e938d69")
116
117public:
118 static constexpr bool is_unique = true;
119
120 Executor(AvndJit::Model& proc, const Execution::Context& ctx, QObject* parent);
121 ~Executor() override;
122};
124}
125
126namespace AvndJit
127{
128class EditAvndScript : public Scenario::EditScript<Model, Model::p_script>
129{
130 SCORE_COMMAND_DECL(Jit::CommandFactoryName(), EditAvndScript, "Edit a C++ program")
131public:
132 using Scenario::EditScript<Model, Model::p_script>::EditScript;
133};
134
135}
136
137namespace score
138{
139template <>
140struct StaticPropertyCommand<AvndJit::Model::p_script> : AvndJit::EditAvndScript
141{
142 using AvndJit::EditAvndScript::EditAvndScript;
143};
144}
Definition AvndJit.hpp:129
Definition AvndJit.hpp:114
Definition DataStreamVisitor.hpp:202
Definition Process/Execution/ProcessComponent.hpp:123
Definition JSONVisitor.hpp:423
Definition EffectFactory.hpp:86
Definition EffectFactory.hpp:14
The Process class.
Definition score-lib-process/Process/Process.hpp:62
Definition ScriptEditor.hpp:49
Definition ScriptEditCommand.hpp:16
The id_base_t class.
Definition Identifier.hpp:59
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
@ DynamicPorts
The process has a variable structure, e.g. its ports can change dynamically.
Definition ProcessFlags.hpp:59
@ ScriptEditingSupported
The process is based on user-editable source code (JS, Faust, etc.)
Definition ProcessFlags.hpp:70
Base toolkit upon which the software is built.
Definition Application.cpp:99
STL namespace.
Definition ExecutionContext.hpp:196
Definition Process/Execution/ProcessComponent.hpp:93
Definition Driver.hpp:11
Definition ScriptProcess.hpp:14
Definition TimeValue.hpp:21
Definition PropertyCommand.hpp:112