aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Workflow
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-05-09 16:37:42 -0700
committerrtk0c <[email protected]>2021-05-09 16:37:42 -0700
commita96761a29e9ff67b1756020f87deabc79f635b79 (patch)
tree72d65a8b6f11f745c9e827581c375668932fd69f /core/src/Model/Workflow
parent97758d5c47698339cfcb9037e477ff463f97b58a (diff)
Work on workflow module
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r--core/src/Model/Workflow/Nodes/NumericNodes.cpp2
-rw-r--r--core/src/Model/Workflow/Workflow.hpp45
-rw-r--r--core/src/Model/Workflow/Workflow_Main.cpp27
-rw-r--r--core/src/Model/Workflow/Workflow_RTTI.cpp2
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;
}
}