From 1ef03a1c7043d617885d319b0803d69907c3c9cc Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Mon, 28 Feb 2022 13:24:26 +0100 Subject: Pass actions and trees in analysis result as shared pointer ... to avoid unnecessary copying and moving of larger objects. --- src/buildtool/common/tree.hpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/buildtool/common/tree.hpp') diff --git a/src/buildtool/common/tree.hpp b/src/buildtool/common/tree.hpp index 512eda86..6b76f8f1 100644 --- a/src/buildtool/common/tree.hpp +++ b/src/buildtool/common/tree.hpp @@ -1,6 +1,7 @@ #ifndef INCLUDED_SRC_BUILDTOOL_COMMON_TREE_HPP #define INCLUDED_SRC_BUILDTOOL_COMMON_TREE_HPP +#include #include #include @@ -13,6 +14,7 @@ class Tree { using inputs_t = ActionDescription::inputs_t; public: + using Ptr = std::shared_ptr; explicit Tree(inputs_t&& inputs) : id_{ComputeId(inputs)}, inputs_{std::move(inputs)} {} @@ -36,7 +38,7 @@ class Tree { [[nodiscard]] static auto FromJson(std::string const& id, nlohmann::json const& json) - -> std::optional { + -> std::optional { auto inputs = inputs_t{}; inputs.reserve(json.size()); for (auto const& [path, artifact] : json.items()) { @@ -46,16 +48,16 @@ class Tree { } inputs.emplace(path, std::move(*artifact_desc)); } - return Tree{id, std::move(inputs)}; + return std::make_shared(id, std::move(inputs)); } + Tree(std::string id, inputs_t&& inputs) + : id_{std::move(id)}, inputs_{std::move(inputs)} {} + private: std::string id_; inputs_t inputs_; - Tree(std::string id, inputs_t&& inputs) - : id_{std::move(id)}, inputs_{std::move(inputs)} {} - static auto ComputeDescription(inputs_t const& inputs) -> nlohmann::json { auto json = nlohmann::json::object(); for (auto const& [path, artifact] : inputs) { -- cgit v1.2.3