[common] Use the absl version of overload directly in MatchVariant
In MatchVariant, we previously used base::Overloaded from Chromium, but
now base::Overloaded is about to be completely removed, so we need to
change the usage to the absl version.
Bug: chromium:392929829
Change-Id: I83ab22fe94af28bd4cc6328c37bdf4e8b2922dc8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/246554
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Ho Cheung <hocheung@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn/common/BUILD.gn b/src/dawn/common/BUILD.gn
index a2fa395..461d726 100644
--- a/src/dawn/common/BUILD.gn
+++ b/src/dawn/common/BUILD.gn
@@ -251,6 +251,7 @@
"${dawn_root}/third_party/gn/abseil-cpp:flat_hash_set",
"${dawn_root}/third_party/gn/abseil-cpp:inlined_vector",
"${dawn_root}/third_party/gn/abseil-cpp:no_destructor",
+ "${dawn_root}/third_party/gn/abseil-cpp:overload",
]
}
}
diff --git a/src/dawn/common/CMakeLists.txt b/src/dawn/common/CMakeLists.txt
index bbf2ccd..0360786 100644
--- a/src/dawn/common/CMakeLists.txt
+++ b/src/dawn/common/CMakeLists.txt
@@ -181,6 +181,7 @@
PRIVATE_DEPENDS
absl::inlined_vector
absl::no_destructor
+ absl::overload
dawn::partition_alloc
dawn_shared_utils
${conditional_private_depends}
diff --git a/src/dawn/common/MatchVariant.h b/src/dawn/common/MatchVariant.h
index e691893..f36f7951 100644
--- a/src/dawn/common/MatchVariant.h
+++ b/src/dawn/common/MatchVariant.h
@@ -30,53 +30,17 @@
#include <variant>
+#include "absl/functional/overload.h"
+
namespace dawn {
-// This is the `Overloaded` template in chromium/src/base/functional/Overloaded.h.
-// std::visit() needs to be called with a functor object, such as
-//
-// struct Visitor {
-// std::string operator()(const PackageA& source) {
-// return "PackageA";
-// }
-//
-// std::string operator()(const PackageB& source) {
-// return "PackageB";
-// }
-// };
-//
-// std::variant<PackageA, PackageB> var = PackageA();
-// return std::visit(Visitor(), var);
-//
-// `Overloaded` enables the above code to be written as:
-//
-// std::visit(
-// Overloaded{
-// [](const PackageA& pack) { return "PackageA"; },
-// [](const PackageB& pack) { return "PackageB"; },
-// }, var);
-//
-// Note: Overloads must be implemented for all the variant options. Otherwise, there will be a
-// compilation error.
-//
-// This struct inherits operator() method from all its base classes. Introduces operator() method
-// from all its base classes into its definition.
-template <typename... Callables>
-struct Overloaded : Callables... {
- using Callables::operator()...;
-};
-
-// Uses template argument deduction so that the `Overloaded` struct can be used without specifying
-// its template argument. This allows anonymous lambdas passed into the `Overloaded` constructor.
-template <typename... Callables>
-Overloaded(Callables...) -> Overloaded<Callables...>;
-
-// With this template we can simplify the call of std::visit(Overloaded{...}, variant).
+// With this template we can simplify the call of
+// std::visit(absl::Overload{...}, variant).
template <typename Variant, typename... Callables>
auto MatchVariant(const Variant& v, Callables... args) {
- return std::visit(Overloaded{args...}, v);
+ return std::visit(absl::Overload{args...}, v);
}
} // namespace dawn
-#endif
+#endif // SRC_DAWN_COMMON_MATCHVARIANT_H_
diff --git a/third_party/gn/abseil-cpp/BUILD.gn b/third_party/gn/abseil-cpp/BUILD.gn
index fc03573..4e34b8d 100644
--- a/third_party/gn/abseil-cpp/BUILD.gn
+++ b/third_party/gn/abseil-cpp/BUILD.gn
@@ -920,6 +920,14 @@
]
}
+absl_source_set("overload") {
+ public = [ "${dawn_abseil_dir}/absl/functional/overload.h" ]
+ deps = [
+ ":config",
+ ":type_traits",
+ ]
+}
+
absl_source_set("utf8_for_code_point") {
sources =
[ "${dawn_abseil_dir}/absl/debugging/internal/utf8_for_code_point.cc" ]