Loading...
Searching...
No Matches
ExecutionTransaction.hpp
1#pragma once
2#include <Process/ExecutionCommand.hpp>
3#include <Process/ExecutionContext.hpp>
4
5#include <memory>
6#include <verdigris>
7
8namespace Execution
9{
10struct Context;
11template <typename T>
12inline constexpr auto gc(T&& t) noexcept
13{
14 return [gced = std::move(t)] {};
15}
16
18{
19 const Context& context;
20 std::vector<ExecutionCommand> commands;
21 explicit Transaction(const Context& ctx) noexcept
22 : context{ctx}
23 {
24 }
25
26 Transaction(Transaction&& other) noexcept
27 : context{other.context}
28 , commands(std::move(other.commands))
29 {
30 }
31
32 Transaction& operator=(Transaction&& other) noexcept
33 {
34 commands = std::move(other.commands);
35 return *this;
36 }
37 void reserve(std::size_t sz) noexcept { commands.reserve(sz); }
38 bool empty() const noexcept { return commands.empty(); }
39 template <typename T>
40 void push_back(T&& t) noexcept
41 {
42 commands.push_back(std::move(t));
43 }
44
45 void run_all()
46 {
47 context.executionQueue.enqueue(
48 [t = std::move(*this)]() mutable { t.run_all_in_exec(); });
49 }
50
51 void run_all_in_exec()
52 {
53 for(auto& cmd : commands)
54 cmd();
55 }
56};
57
58}
59Q_DECLARE_METATYPE(Execution::Transaction*)
60W_REGISTER_ARGTYPE(Execution::Transaction*)
Components used for the execution of a score.
Definition ProcessComponent.cpp:12
Definition ExecutionContext.hpp:76
ExecutionCommandQueue & executionQueue
Definition ExecutionContext.hpp:91
Definition ExecutionTransaction.hpp:18