summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/common
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2024-05-27 16:16:26 +0200
committerMaksim Denisov <denisov.maksim@huawei.com>2024-05-28 16:19:19 +0200
commitc0b46b2f4e47fc017beeae34ff555418d198e1d4 (patch)
tree6a4319a1b974fd6113fab80dd1047c1a8cb7be18 /src/buildtool/execution_api/common
parentfd8ad0f561dd253bf7399ce9a4594242e918ca25 (diff)
downloadjustbuild-c0b46b2f4e47fc017beeae34ff555418d198e1d4.tar.gz
Use shared_ptr for data in ContentBlob
...to reduce the "price" of copying.
Diffstat (limited to 'src/buildtool/execution_api/common')
-rw-r--r--src/buildtool/execution_api/common/TARGETS2
-rw-r--r--src/buildtool/execution_api/common/content_blob_container.hpp11
2 files changed, 10 insertions, 3 deletions
diff --git a/src/buildtool/execution_api/common/TARGETS b/src/buildtool/execution_api/common/TARGETS
index 956fb3a3..50e556a9 100644
--- a/src/buildtool/execution_api/common/TARGETS
+++ b/src/buildtool/execution_api/common/TARGETS
@@ -96,6 +96,6 @@
, "name": ["content_blob_container"]
, "hdrs": ["content_blob_container.hpp"]
, "stage": ["src", "buildtool", "execution_api", "common"]
- , "deps": [["src/utils/cpp", "transformed_range"]]
+ , "deps": [["src/utils/cpp", "transformed_range"], ["@", "gsl", "", "gsl"]]
}
}
diff --git a/src/buildtool/execution_api/common/content_blob_container.hpp b/src/buildtool/execution_api/common/content_blob_container.hpp
index fcd10f09..f2d7476e 100644
--- a/src/buildtool/execution_api/common/content_blob_container.hpp
+++ b/src/buildtool/execution_api/common/content_blob_container.hpp
@@ -16,22 +16,29 @@
#define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_COMMON_CONTENT_BLOB_CONTAINER_HPP
#include <cstddef>
+#include <memory>
#include <string>
#include <unordered_map>
#include <utility> //std::move
#include <vector>
+#include "gsl/gsl"
#include "src/utils/cpp/transformed_range.hpp"
template <typename TDigest>
struct ContentBlob final {
ContentBlob(TDigest mydigest, std::string mydata, bool is_exec) noexcept
: digest{std::move(mydigest)},
- data{std::move(mydata)},
+ data{std::make_shared<std::string>(std::move(mydata))},
is_exec{is_exec} {}
+ ContentBlob(TDigest mydigest,
+ gsl::not_null<std::shared_ptr<std::string>> const& mydata,
+ bool is_exec) noexcept
+ : digest{std::move(mydigest)}, data(mydata), is_exec{is_exec} {}
+
TDigest digest{};
- std::string data{};
+ std::shared_ptr<std::string> data{};
bool is_exec{};
};