From 8157678eba97d7de5c53b424a9866d327392bbd9 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 31 May 2021 12:27:58 -0700 Subject: Fix standard incompetence found by MSVC - requires-expression still not working, because they aren't supported yet outside of a concept --- core/src/Model/Workflow/Values/BasicValues.cpp | 16 ++++++---- core/src/Model/Workflow/Workflow.hpp | 44 +++++++++++--------------- core/src/Model/Workflow/Workflow_Main.cpp | 16 +++++++--- 3 files changed, 39 insertions(+), 37 deletions(-) (limited to 'core/src/Model/Workflow') diff --git a/core/src/Model/Workflow/Values/BasicValues.cpp b/core/src/Model/Workflow/Values/BasicValues.cpp index a7cf635..748c652 100644 --- a/core/src/Model/Workflow/Values/BasicValues.cpp +++ b/core/src/Model/Workflow/Values/BasicValues.cpp @@ -14,14 +14,13 @@ NumericValue::NumericValue() { } -template +template static std::string NumberToString(T value) { - constexpr auto kSize = std::numeric_limits::max_digits10; - char buf[kSize]; + char buf[kMaxSize]; #if PLATFORM_WIN32 - auto res = std::to_chars(buf, buf + kSize, value); + auto res = std::to_chars(buf, buf + kMaxSize, value); if (res.ec == std::errc()) { return std::string(buf, res.ptr); } else { @@ -35,17 +34,20 @@ static std::string NumberToString(T value) std::string NumericValue::GetTruncatedString() const { - return ::NumberToString((int64_t)mValue); + constexpr auto kMaxSize = std::numeric_limits::digits10; + return ::NumberToString((int64_t)mValue); } std::string NumericValue::GetRoundedString() const { - return ::NumberToString((int64_t)std::round(mValue)); + constexpr auto kMaxSize = std::numeric_limits::digits10; + return ::NumberToString((int64_t)std::round(mValue)); } std::string NumericValue::GetString() const { - return ::NumberToString(mValue); + constexpr auto kMaxSize = std::numeric_limits::max_digits10; + return ::NumberToString(mValue); } int64_t NumericValue::GetInt() const diff --git a/core/src/Model/Workflow/Workflow.hpp b/core/src/Model/Workflow/Workflow.hpp index ded9bfb..161400e 100644 --- a/core/src/Model/Workflow/Workflow.hpp +++ b/core/src/Model/Workflow/Workflow.hpp @@ -5,6 +5,7 @@ #include "cplt_fwd.hpp" #include +#include #include #include #include @@ -240,34 +241,27 @@ public: /* Graph rebuild */ - struct GraphUpdateResult + enum GraphUpdateResult { - struct Success - { - }; - - struct NoWorkToDo - { - }; - - struct UnsatisfiedDependencies - { - std::vector UnsatisfiedNodes; - }; - - struct UnreachableNodes - { - std::vector UnreachableNodes; - }; - - using T = std::variant< - Success, - NoWorkToDo, - UnsatisfiedDependencies, - UnreachableNodes>; + /// Successfully rebuilt graph dependent data. + /// Details: nothing is written. + GUR_Success, + /// Nothing has changed since last time UpdateGraph() was called. + /// Details: nothing is written. + GUR_NoWorkToDo, + /// Details: list of nodes is written. + GUR_UnsatisfiedDependencies, + /// Details: list of nodes is written. + GUR_UnreachableNodes, }; - GraphUpdateResult::T UpdateGraph(); + using GraphUpdateDetails = std::variant< + // Case: nothing + std::monostate, + // Case: list of nodes (ids) + std::vector>; + + GraphUpdateResult UpdateGraph(GraphUpdateDetails* details = nullptr); /* Serialization */ diff --git a/core/src/Model/Workflow/Workflow_Main.cpp b/core/src/Model/Workflow/Workflow_Main.cpp index bfe007c..61cd510 100644 --- a/core/src/Model/Workflow/Workflow_Main.cpp +++ b/core/src/Model/Workflow/Workflow_Main.cpp @@ -524,10 +524,10 @@ bool Workflow::DisconnectByDestination(WorkflowNode& destinationNode, uint32_t d return true; } -Workflow::GraphUpdateResult::T Workflow::UpdateGraph() +Workflow::GraphUpdateResult Workflow::UpdateGraph(GraphUpdateDetails* details) { if (!mDepthsDirty) { - return GraphUpdateResult::NoWorkToDo{}; + return GUR_NoWorkToDo; } // Terminology: @@ -577,7 +577,10 @@ Workflow::GraphUpdateResult::T Workflow::UpdateGraph() } if (!unsatisfiedNodes.empty()) { - return GraphUpdateResult::UnsatisfiedDependencies{ std::move(unsatisfiedNodes) }; + if (details) { + details->emplace(std::move(unsatisfiedNodes)); + } + return GUR_UnsatisfiedDependencies; } } @@ -624,10 +627,13 @@ Workflow::GraphUpdateResult::T Workflow::UpdateGraph() unreachableNodes.push_back(i); } - return GraphUpdateResult::UnreachableNodes{ std::move(unreachableNodes) }; + if (details) { + details->emplace(std::move(unreachableNodes)); + } + return GUR_UnreachableNodes; } - return GraphUpdateResult::Success{}; + return GUR_Success; } Workflow::ReadResult Workflow::ReadFrom(std::istream& stream) -- cgit v1.2.3-70-g09d2