summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/execution_engine/traverser/TARGETS1
-rw-r--r--src/buildtool/execution_engine/traverser/traverser.hpp6
-rw-r--r--src/utils/cpp/concepts.hpp40
3 files changed, 13 insertions, 34 deletions
diff --git a/src/buildtool/execution_engine/traverser/TARGETS b/src/buildtool/execution_engine/traverser/TARGETS
index a226a1ae..93de9860 100644
--- a/src/buildtool/execution_engine/traverser/TARGETS
+++ b/src/buildtool/execution_engine/traverser/TARGETS
@@ -9,7 +9,6 @@
, ["src/buildtool/logging", "log_level"]
, ["src/buildtool/logging", "logging"]
, ["src/buildtool/multithreading", "task_system"]
- , ["src/utils/cpp", "concepts"]
]
, "stage": ["src", "buildtool", "execution_engine", "traverser"]
}
diff --git a/src/buildtool/execution_engine/traverser/traverser.hpp b/src/buildtool/execution_engine/traverser/traverser.hpp
index c4d4b16f..993fe949 100644
--- a/src/buildtool/execution_engine/traverser/traverser.hpp
+++ b/src/buildtool/execution_engine/traverser/traverser.hpp
@@ -16,6 +16,7 @@
#define INCLUDED_SRC_BUILDTOOL_EXECUTION_ENGINE_TRAVERSER_TRAVERSER_HPP
#include <atomic>
+#include <concepts>
#include <cstddef>
#include <functional>
#include <string>
@@ -28,15 +29,14 @@
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/buildtool/multithreading/task_system.hpp"
-#include "src/utils/cpp/concepts.hpp"
/// \brief Concept required for Runners used by the Traverser.
template <class T>
concept Runnable = requires(T const r,
DependencyGraph::ActionNode const* action,
DependencyGraph::ArtifactNode const* artifact) {
- { r.Process(action) } -> same_as<bool>;
- { r.Process(artifact) } -> same_as<bool>;
+ { r.Process(action) } -> std::same_as<bool>;
+ { r.Process(artifact) } -> std::same_as<bool>;
};
/// \brief Class to traverse the dependency graph executing necessary actions
diff --git a/src/utils/cpp/concepts.hpp b/src/utils/cpp/concepts.hpp
index d1500e85..ce7ccdec 100644
--- a/src/utils/cpp/concepts.hpp
+++ b/src/utils/cpp/concepts.hpp
@@ -16,51 +16,31 @@
#define INCLUDED_SRC_UTILS_CPP_CONCEPTS_HPP
#include <chrono>
+#include <concepts>
#include <cstddef>
#include <ctime>
#include <iterator>
#include <string>
#include <type_traits>
-// TODO(modernize): remove this once std::derived_from is shipped with libcxx
-template <class T, class U>
-concept derived_from =
- std::is_base_of_v<U, T> &&
- std::is_convertible_v<const volatile T*, const volatile U*>;
-
-// TODO(modernize): remove this once std::same_as is shipped with libcxx
-template <class T, class U>
-concept same_as = std::is_same_v<T, U> and std::is_same_v<U, T>;
-
template <class T>
concept ContainsString = requires { typename T::value_type; } and
- std::is_same_v<typename T::value_type, std::string>;
+ std::same_as<typename T::value_type, std::string>;
template <class T>
-concept HasSize = requires(T const c) {
- {
- c.size()
- } -> same_as<std::size_t>; // TODO(modernize): replace by std::same_as
-};
+concept HasSize =
+ requires(T const c) { std::same_as<decltype(c.size()), std::size_t>; };
template <class T>
concept InputIterableContainer = requires(T const c) {
- {
- c.begin()
- } -> same_as<typename T::const_iterator>; // TODO(modernize): replace by
- // std::input_iterator
- {
- c.end()
- } -> same_as<typename T::const_iterator>; // TODO(modernize): replace by
- // std::input_iterator
+ std::input_iterator<decltype(c.begin())>;
+ std::input_iterator<decltype(c.end())>;
};
template <class T>
-concept OutputIterableContainer = InputIterableContainer<T> and requires(T c) {
- {
- std::inserter(c, c.begin())
- } -> same_as<std::insert_iterator<T>>; // TODO(modernize): replace by
- // std::output_iterator
+concept OutputIterableContainer = requires(T c) {
+ InputIterableContainer<T>;
+ std::output_iterator<decltype(c.begin()), typename T::value_type>;
};
template <class T>
@@ -82,7 +62,7 @@ template <typename T>
concept StrMapConstForwardIterator = requires(T const c) {
{
std::remove_reference_t<decltype((*c).first)>{(*c).first}
- } -> same_as<std::string const>;
+ } -> std::same_as<std::string const>;
};
#endif // INCLUDED_SRC_UTILS_CPP_CONCEPTS_HPP