diff options
author | rtk0c <[email protected]> | 2021-05-09 16:37:42 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-05-09 16:37:42 -0700 |
commit | a96761a29e9ff67b1756020f87deabc79f635b79 (patch) | |
tree | 72d65a8b6f11f745c9e827581c375668932fd69f /core/src/Model/Workflow | |
parent | 97758d5c47698339cfcb9037e477ff463f97b58a (diff) |
Work on workflow module
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r-- | core/src/Model/Workflow/Nodes/NumericNodes.cpp | 2 | ||||
-rw-r--r-- | core/src/Model/Workflow/Workflow.hpp | 45 | ||||
-rw-r--r-- | core/src/Model/Workflow/Workflow_Main.cpp | 27 | ||||
-rw-r--r-- | core/src/Model/Workflow/Workflow_RTTI.cpp | 2 |
4 files changed, 35 insertions, 41 deletions
diff --git a/core/src/Model/Workflow/Nodes/NumericNodes.cpp b/core/src/Model/Workflow/Nodes/NumericNodes.cpp index 7893377..083172e 100644 --- a/core/src/Model/Workflow/Nodes/NumericNodes.cpp +++ b/core/src/Model/Workflow/Nodes/NumericNodes.cpp @@ -15,6 +15,7 @@ WorkflowNode::Kind NumericOperationNode::OperationTypeToNodeKind(OperationType t case Subtraction: return KD_NumericSubtraction; case Multiplication: return KD_NumericMultiplication; case Division: return KD_NumericDivision; + default: return InvalidKind; } } @@ -25,6 +26,7 @@ NumericOperationNode::OperationType NumericOperationNode::NodeKindToOperationTyp case KD_NumericSubtraction: return Subtraction; case KD_NumericMultiplication: return Multiplication; case KD_NumericDivision: return Division; + default: return InvalidType; } } diff --git a/core/src/Model/Workflow/Workflow.hpp b/core/src/Model/Workflow/Workflow.hpp index f26fff9..cf3e2f9 100644 --- a/core/src/Model/Workflow/Workflow.hpp +++ b/core/src/Model/Workflow/Workflow.hpp @@ -217,29 +217,34 @@ public: /* Graph rebuild */ - struct GraphUpdate_Success + struct GraphUpdateResult { - }; - struct GraphUpdate_NoWorkToDo - { - }; - struct GraphUpdate_UnsatisfiedDependencies - { - std::vector<size_t> UnsatisfiedNodes; - }; - struct GraphUpdate_UnreachableNodes - { - std::vector<size_t> UnreachableNodes; - }; + struct Success + { + }; + + struct NoWorkToDo + { + }; + + struct UnsatisfiedDependencies + { + std::vector<size_t> UnsatisfiedNodes; + }; - using GraphUpdateResult = std::variant< - GraphUpdate_Success, - GraphUpdate_NoWorkToDo, - GraphUpdate_UnsatisfiedDependencies, - GraphUpdate_UnreachableNodes>; + struct UnreachableNodes + { + std::vector<size_t> UnreachableNodes; + }; + + using T = std::variant< + Success, + NoWorkToDo, + UnsatisfiedDependencies, + UnreachableNodes>; + }; - /// When `getInfo == false, the corresponding error code is returned but without/with empty payloads. - GraphUpdateResult UpdateGraph(bool getInfo = true); + GraphUpdateResult::T UpdateGraph(); /* Serialization */ diff --git a/core/src/Model/Workflow/Workflow_Main.cpp b/core/src/Model/Workflow/Workflow_Main.cpp index c3e3791..a108dc7 100644 --- a/core/src/Model/Workflow/Workflow_Main.cpp +++ b/core/src/Model/Workflow/Workflow_Main.cpp @@ -631,10 +631,10 @@ bool Workflow::DisconnectByDestination(WorkflowNode& destinationNode, int destin return true; } -Workflow::GraphUpdateResult Workflow::UpdateGraph(bool getInfo) +Workflow::GraphUpdateResult::T Workflow::UpdateGraph() { if (!mDepthsDirty) { - return GraphUpdate_NoWorkToDo{}; + return GraphUpdateResult::NoWorkToDo{}; } // Terminology: @@ -672,7 +672,7 @@ Workflow::GraphUpdateResult Workflow::UpdateGraph(bool getInfo) if (!node) continue; if (!CheckNodeDependencies(*node)) { - if (getInfo) unsatisfiedNodes.push_back(i); + unsatisfiedNodes.push_back(i); } node->mDepth = -1; @@ -684,15 +684,10 @@ Workflow::GraphUpdateResult Workflow::UpdateGraph(bool getInfo) } if (!unsatisfiedNodes.empty()) { - return GraphUpdate_UnsatisfiedDependencies{ std::move(unsatisfiedNodes) }; + return GraphUpdateResult::UnsatisfiedDependencies{ std::move(unsatisfiedNodes) }; } } - auto HasCyclicReference = [&](WorkflowNode& node) -> bool { - // TODO - return false; - }; - auto ProcessNode = [&](WorkflowNode& node) -> void { for (auto& pin : node.mOutputs) { if (!pin.IsConnected()) continue; @@ -702,11 +697,6 @@ Workflow::GraphUpdateResult Workflow::UpdateGraph(bool getInfo) auto& wn = workingNodes[point.Node]; auto& n = *mNodes[point.Node].get(); - if (HasCyclicReference(n)) { - // TODO - break; - } - wn.FulfilledInputCount++; wn.MaximumDepth = std::max(node.mDepth, wn.MaximumDepth); @@ -730,10 +720,7 @@ Workflow::GraphUpdateResult Workflow::UpdateGraph(bool getInfo) } if (processedNodes < mNodes.size()) { - // There is unreachable nodes - if (!getInfo) { - return GraphUpdate_UnreachableNodes{}; - } + // There is unreachable nodes, collect them and report to the caller std::vector<size_t> unreachableNodes; for (size_t i = 0; i < mNodes.size(); ++i) { @@ -746,10 +733,10 @@ Workflow::GraphUpdateResult Workflow::UpdateGraph(bool getInfo) unreachableNodes.push_back(i); } - return GraphUpdate_UnreachableNodes{ std::move(unreachableNodes) }; + return GraphUpdateResult::UnreachableNodes{ std::move(unreachableNodes) }; } - return GraphUpdate_Success{}; + return GraphUpdateResult::Success{}; } Workflow::ReadResult Workflow::ReadFrom(std::istream& stream) diff --git a/core/src/Model/Workflow/Workflow_RTTI.cpp b/core/src/Model/Workflow/Workflow_RTTI.cpp index c16b8d1..34347b1 100644 --- a/core/src/Model/Workflow/Workflow_RTTI.cpp +++ b/core/src/Model/Workflow/Workflow_RTTI.cpp @@ -48,6 +48,6 @@ std::unique_ptr<WorkflowNode> WorkflowNode::CreateByKind(WorkflowNode::Kind kind case KD_FormInput: return std::make_unique<FormInputNode>(); case KD_DatabaseRowsInput: return std::make_unique<DatabaseRowsInputNode>(); - case InvalidKind: return "<invalid kind>"; + case InvalidKind: return nullptr; } } |