Loading...
Searching...
No Matches
JitModel.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>
17namespace Jit
18{
19class JitEffectModel;
20}
21
22PROCESS_METADATA(
23 , Jit::JitEffectModel, "0a3b49d6-4ce7-4668-aec3-9505b6ee1a60", "Jit", "JIT",
24 Process::ProcessCategory::Script, "Script", "JIT compilation process", "ossia score",
25 QStringList{}, {}, {},
26 QUrl("https://ossia.io/score-docs/processes/cpp_jit.html#c-jit"),
28namespace Jit
29{
30struct Driver;
31
32using NodeCompiler = Driver;
33using NodeFactory = std::function<ossia::graph_node*()>;
34
35class JitEffectModel : public Process::ProcessModel
36{
37 friend class JitUI;
38 friend class JitUpdateUI;
39 SCORE_SERIALIZE_FRIENDS
40 PROCESS_METADATA_IMPL(JitEffectModel)
41
42 W_OBJECT(JitEffectModel)
43public:
44 JitEffectModel(
45 TimeVal t, const QString& jitProgram, const Id<Process::ProcessModel>&,
46 QObject* parent);
47 ~JitEffectModel() override;
48
49 JitEffectModel(DataStream::Deserializer& vis, QObject* parent);
50 JitEffectModel(JSONObject::Deserializer& vis, QObject* parent);
51 JitEffectModel(DataStream::Deserializer&& vis, QObject* parent);
52 JitEffectModel(JSONObject::Deserializer&& vis, QObject* parent);
53
54 bool validate(const QString& txt) const noexcept;
55
56 const QString& script() const { return m_text; }
57 [[nodiscard]] Process::ScriptChangeResult setScript(const QString& txt);
58 void scriptChanged(const QString& txt) W_SIGNAL(scriptChanged, txt);
59 void programChanged() W_SIGNAL(programChanged);
60
61 QString prettyName() const noexcept override;
62
63 std::shared_ptr<NodeFactory> factory;
64
65 void errorMessage(int line, const QString& e) W_SIGNAL(errorMessage, line, e);
66 PROPERTY(QString, script READ script WRITE setScript NOTIFY scriptChanged)
67private:
68 std::shared_ptr<NodeFactory> getJitFactory();
69
70 QString effect() const noexcept override;
71 void loadPreset(const Process::Preset& preset) override;
72 Process::Preset savePreset() const noexcept override;
73 bool presetChangesPorts(const Process::Preset& p) const noexcept override
74 {
76 }
77
78 void init();
79 [[nodiscard]] Process::ScriptChangeResult reload();
80 QString m_text;
81 std::unique_ptr<NodeCompiler> m_compiler;
82};
83
84struct LanguageSpec
85{
86 static constexpr const char* language = "C++";
87};
88
90using LayerFactory = Process::ScriptLayerFactory_T<
92 JitEffectModel, JitEffectModel::p_script, LanguageSpec>>;
93}
94
95namespace Process
96{
97template <>
98QString
99EffectProcessFactory_T<Jit::JitEffectModel>::customConstructionData() const noexcept;
100
101template <>
102Process::Descriptor
103EffectProcessFactory_T<Jit::JitEffectModel>::descriptor(QString d) const noexcept;
104
105template <>
106Process::Descriptor EffectProcessFactory_T<Jit::JitEffectModel>::descriptor(
107 const Process::ProcessModel& d) const noexcept;
108}
109
110namespace Execution
111{
113 : public Execution::ProcessComponent_T<Jit::JitEffectModel, ossia::node_process>
114{
115 COMPONENT_METADATA("122ceaeb-cbcc-4808-91f2-1929e3ca8292")
116
117public:
118 static constexpr bool is_unique = true;
119
121 Jit::JitEffectModel& proc, const Execution::Context& ctx, QObject* parent);
122 ~JitEffectComponent() override;
123};
126}
127
128namespace Jit
129{
130class EditScript : public Scenario::EditScript<JitEffectModel, JitEffectModel::p_script>
131{
132 SCORE_COMMAND_DECL(CommandFactoryName(), EditScript, "Edit a C++ program")
133public:
134 using Scenario::EditScript<JitEffectModel, JitEffectModel::p_script>::EditScript;
135};
136
137}
138
139namespace score
140{
141template <>
142struct StaticPropertyCommand<Jit::JitEffectModel::p_script> : Jit::EditScript
143{
144 using Jit::EditScript::EditScript;
145};
146}
Definition DataStreamVisitor.hpp:202
Definition JitModel.hpp:114
Definition Process/Execution/ProcessComponent.hpp:131
Definition JSONVisitor.hpp:423
Definition JitModel.hpp:131
Definition EffectFactory.hpp:86
Definition EffectFactory.hpp:14
The Process class.
Definition score-lib-process/Process/Process.hpp:82
bool scriptPresetChangesPorts(const Preset &preset) const noexcept
Definition score-lib-process/Process/Process.cpp:271
Definition ScriptEditor.hpp:54
Definition ScriptEditCommand.hpp:16
The id_base_t class.
Definition Identifier.hpp:59
Components used for the execution of a score.
Definition PortTap.cpp:24
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:83
STL namespace.
Definition ExecutionContext.hpp:208
Definition Process/Execution/ProcessComponent.hpp:101
Definition ScriptProcess.hpp:14
Definition TimeValue.hpp:21
Definition PropertyCommand.hpp:112