diff options
author | rtk0c <[email protected]> | 2021-04-19 14:00:47 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-04-19 14:00:47 -0700 |
commit | 1e09caaa2980fe901453b4b90985967a51157887 (patch) | |
tree | df61974f9a5efa9a6732bd6d7b1ec1e6d1af182a /core/src/Model/Workflow/Evaluation.hpp | |
parent | b00b306de1140cb7b759ed0f639e8210fd7dffa6 (diff) |
Split workflow into multiple files, fix unity build
Diffstat (limited to 'core/src/Model/Workflow/Evaluation.hpp')
-rw-r--r-- | core/src/Model/Workflow/Evaluation.hpp | 57 |
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(); +}; |