diff options
author | Oliver Reiche <oliver.reiche@gmail.com> | 2023-04-15 16:28:33 +0200 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-04-26 18:29:44 +0200 |
commit | d762bfa1953933dfac0a29a74523c25719396b8c (patch) | |
tree | 1002b0aecc1af698f0349a4efb4bfc169886c60a /src/buildtool/multithreading | |
parent | 03e1019aca5d08e53bfeb455071d91561fc33039 (diff) | |
download | justbuild-d762bfa1953933dfac0a29a74523c25719396b8c.tar.gz |
imports: Switch to Microsoft GSL implementation
... with two minor code base changes compared to previous
use of gsl-lite:
- dag.hpp: ActionNode::Ptr and ArtifactNode::Ptr are not
wrapped in gsl::not_null<> anymore, due to lack of support
for wrapping std::unique_ptr<>. More specifically, the
move constructor is missing, rendering it impossible to
use std::vector<>::emplace_back().
- utils/cpp/gsl.hpp: New header file added to implement the
macros ExpectsAudit() and EnsureAudit(), asserts running
only in debug builds, which were available in gsl-lite but
are missing in MS GSL.
Diffstat (limited to 'src/buildtool/multithreading')
-rw-r--r-- | src/buildtool/multithreading/TARGETS | 17 | ||||
-rw-r--r-- | src/buildtool/multithreading/async_map.hpp | 2 | ||||
-rw-r--r-- | src/buildtool/multithreading/async_map_consumer.hpp | 2 | ||||
-rw-r--r-- | src/buildtool/multithreading/async_map_node.hpp | 5 | ||||
-rw-r--r-- | src/buildtool/multithreading/notification_queue.hpp | 8 | ||||
-rw-r--r-- | src/buildtool/multithreading/task_system.cpp | 4 |
6 files changed, 17 insertions, 21 deletions
diff --git a/src/buildtool/multithreading/TARGETS b/src/buildtool/multithreading/TARGETS index 2e5467f4..2d758589 100644 --- a/src/buildtool/multithreading/TARGETS +++ b/src/buildtool/multithreading/TARGETS @@ -9,8 +9,7 @@ { "type": ["@", "rules", "CC", "library"] , "name": ["notification_queue"] , "hdrs": ["notification_queue.hpp"] - , "deps": - ["task", ["src/utils/cpp", "atomic"], ["@", "gsl-lite", "", "gsl-lite"]] + , "deps": ["task", ["src/utils/cpp", "atomic"], ["@", "gsl", "", "gsl"]] , "stage": ["src", "buildtool", "multithreading"] } , "task_system": @@ -18,7 +17,7 @@ , "name": ["task_system"] , "hdrs": ["task_system.hpp"] , "srcs": ["task_system.cpp"] - , "deps": ["notification_queue", ["@", "gsl-lite", "", "gsl-lite"]] + , "deps": ["notification_queue", ["@", "gsl", "", "gsl"]] , "stage": ["src", "buildtool", "multithreading"] , "private-deps": ["task"] } @@ -26,19 +25,15 @@ { "type": ["@", "rules", "CC", "library"] , "name": ["async_map_node"] , "hdrs": ["async_map_node.hpp"] - , "deps": ["task", "task_system", ["@", "gsl-lite", "", "gsl-lite"]] + , "deps": + ["task", "task_system", ["src/utils/cpp", "gsl"], ["@", "gsl", "", "gsl"]] , "stage": ["src", "buildtool", "multithreading"] } , "async_map": { "type": ["@", "rules", "CC", "library"] , "name": ["async_map"] , "hdrs": ["async_map.hpp"] - , "deps": - [ "task" - , "task_system" - , "async_map_node" - , ["@", "gsl-lite", "", "gsl-lite"] - ] + , "deps": ["task", "task_system", "async_map_node", ["@", "gsl", "", "gsl"]] , "stage": ["src", "buildtool", "multithreading"] } , "async_map_consumer": @@ -50,7 +45,7 @@ , "task_system" , "async_map_node" , "async_map" - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] ] , "stage": ["src", "buildtool", "multithreading"] } diff --git a/src/buildtool/multithreading/async_map.hpp b/src/buildtool/multithreading/async_map.hpp index 91ffd8c2..3267b312 100644 --- a/src/buildtool/multithreading/async_map.hpp +++ b/src/buildtool/multithreading/async_map.hpp @@ -23,7 +23,7 @@ #include <utility> // std::make_pair to use std::unordered_map's emplace() #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/multithreading/async_map_node.hpp" #include "src/buildtool/multithreading/task.hpp" #include "src/buildtool/multithreading/task_system.hpp" diff --git a/src/buildtool/multithreading/async_map_consumer.hpp b/src/buildtool/multithreading/async_map_consumer.hpp index 3dcc0eff..0de6b36f 100644 --- a/src/buildtool/multithreading/async_map_consumer.hpp +++ b/src/buildtool/multithreading/async_map_consumer.hpp @@ -25,7 +25,7 @@ #include <unordered_set> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/multithreading/async_map.hpp" #include "src/buildtool/multithreading/async_map_node.hpp" #include "src/buildtool/multithreading/task.hpp" diff --git a/src/buildtool/multithreading/async_map_node.hpp b/src/buildtool/multithreading/async_map_node.hpp index c729582d..2c07f11b 100644 --- a/src/buildtool/multithreading/async_map_node.hpp +++ b/src/buildtool/multithreading/async_map_node.hpp @@ -19,9 +19,10 @@ #include <mutex> #include <optional> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/multithreading/task.hpp" #include "src/buildtool/multithreading/task_system.hpp" +#include "src/utils/cpp/gsl.hpp" // Wrapper around Value to enable async access to it in a continuation-style // programming way @@ -154,7 +155,7 @@ class AsyncMapNode { // Not thread safe, do not use unless the value has been already set [[nodiscard]] auto GetValue() const& noexcept -> Value const& { // Will only be checked in debug build - gsl_ExpectsAudit(value_.has_value()); + ExpectsAudit(value_.has_value()); return *value_; } [[nodiscard]] auto GetValue() && noexcept = delete; diff --git a/src/buildtool/multithreading/notification_queue.hpp b/src/buildtool/multithreading/notification_queue.hpp index 1df5d659..9d2f06eb 100644 --- a/src/buildtool/multithreading/notification_queue.hpp +++ b/src/buildtool/multithreading/notification_queue.hpp @@ -22,7 +22,7 @@ #include <shared_mutex> #include <utility> // std::forward -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/multithreading/task.hpp" #include "src/utils/cpp/atomic.hpp" @@ -67,14 +67,14 @@ class WaitableZeroCounter { class NotificationQueue { public: explicit NotificationQueue( - gsl::not_null<WaitableZeroCounter*> total_workload) - : total_workload_{std::move(total_workload)} {} + gsl::not_null<WaitableZeroCounter*> const& total_workload) + : total_workload_{total_workload} {} NotificationQueue(NotificationQueue const& other) = delete; NotificationQueue(NotificationQueue&& other) noexcept : queue_{std::move(other.queue_)}, done_{other.done_}, - total_workload_{std::move(other.total_workload_)} {} + total_workload_{other.total_workload_} {} ~NotificationQueue() = default; [[nodiscard]] auto operator=(NotificationQueue const& other) diff --git a/src/buildtool/multithreading/task_system.cpp b/src/buildtool/multithreading/task_system.cpp index cf9ed543..13c3caec 100644 --- a/src/buildtool/multithreading/task_system.cpp +++ b/src/buildtool/multithreading/task_system.cpp @@ -14,7 +14,7 @@ #include "src/buildtool/multithreading/task_system.hpp" -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/multithreading/task.hpp" TaskSystem::TaskSystem() : TaskSystem(std::thread::hardware_concurrency()) {} @@ -59,7 +59,7 @@ void TaskSystem::Finish() noexcept { } void TaskSystem::Run(std::size_t idx) { - gsl_Expects(thread_count_ > 0); + Expects(thread_count_ > 0); while (not shutdown_) { std::optional<Task> t{}; |