diff options
Diffstat (limited to 'src/buildtool/execution_api/common/content_blob_container.hpp')
-rw-r--r-- | src/buildtool/execution_api/common/content_blob_container.hpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/buildtool/execution_api/common/content_blob_container.hpp b/src/buildtool/execution_api/common/content_blob_container.hpp index 1788d229..bc546ac4 100644 --- a/src/buildtool/execution_api/common/content_blob_container.hpp +++ b/src/buildtool/execution_api/common/content_blob_container.hpp @@ -16,6 +16,7 @@ #define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_COMMON_CONTENT_BLOB_CONTAINER_HPP #include <cstddef> +#include <functional> #include <memory> #include <string> #include <unordered_map> @@ -23,6 +24,7 @@ #include <vector> #include "gsl/gsl" +#include "src/utils/cpp/hash_combine.hpp" #include "src/utils/cpp/transformed_range.hpp" template <typename TDigest> @@ -37,11 +39,30 @@ struct ContentBlob final { bool is_exec) noexcept : digest{std::move(mydigest)}, data(mydata), is_exec{is_exec} {} + [[nodiscard]] auto operator==(ContentBlob const& other) const noexcept + -> bool { + return std::equal_to<TDigest>{}(digest, other.digest) and + is_exec == other.is_exec; + } + TDigest digest; std::shared_ptr<std::string> data; bool is_exec = false; }; +namespace std { +template <typename TDigest> +struct hash<ContentBlob<TDigest>> { + [[nodiscard]] auto operator()( + ContentBlob<TDigest> const& blob) const noexcept -> std::size_t { + std::size_t seed{}; + hash_combine(&seed, blob.digest); + hash_combine(&seed, blob.is_exec); + return seed; + } +}; +} // namespace std + template <typename TDigest> class ContentBlobContainer final { public: |