aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Workflow/Evaluation.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Model/Workflow/Evaluation.hpp')
-rw-r--r--core/src/Model/Workflow/Evaluation.hpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/core/src/Model/Workflow/Evaluation.hpp b/core/src/Model/Workflow/Evaluation.hpp
new file mode 100644
index 0000000..be2e862
--- /dev/null
+++ b/core/src/Model/Workflow/Evaluation.hpp
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "Model/Workflow/Workflow.hpp"
+
+#include <cstddef>
+#include <cstdint>
+#include <string>
+#include <vector>
+
+class WorkflowEvaluationError {
+public:
+ enum MessageType : int16_t {
+ Error,
+ Warning,
+ };
+
+ enum PinType : int16_t {
+ NoPin,
+ InputPin,
+ OutputPin,
+ };
+
+public:
+ std::string Message;
+ size_t NodeId;
+ int PinId;
+ PinType PinType;
+ MessageType Type;
+};
+
+class WorkflowEvaluationContext {
+private:
+ struct RuntimeNode;
+ struct RuntimeConnection;
+
+ Workflow* mWorkflow;
+ std::vector<RuntimeNode> mRuntimeNodes;
+ std::vector<RuntimeConnection> mRuntimeConnections;
+ std::vector<WorkflowEvaluationError> mErrors;
+ std::vector<WorkflowEvaluationError> mWarnings;
+
+public:
+ WorkflowEvaluationContext(Workflow& workflow);
+
+ BaseValue* GetConnectionValue(size_t id, bool constant);
+ BaseValue* GetConnectionValue(const WorkflowNode::InputPin& inputPin);
+ void SetConnectionValue(size_t id, std::unique_ptr<BaseValue> value);
+ void SetConnectionValue(const WorkflowNode::OutputPin& outputPin, std::unique_ptr<BaseValue> value);
+
+ void ReportError(std::string message, const WorkflowNode& node, int pinId, bool inputPin);
+ void ReportError(std::string message, const WorkflowNode& node);
+ void ReportWarning(std::string message, const WorkflowNode& node, int pinId, bool inputPin);
+ void ReportWarning(std::string message, const WorkflowNode& node);
+
+ /// Run until all possible paths have been evaluated.
+ void Run();
+};