summaryrefslogtreecommitdiff
path: root/chromium/v8/src/base/template-utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/base/template-utils.h')
-rw-r--r--chromium/v8/src/base/template-utils.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/chromium/v8/src/base/template-utils.h b/chromium/v8/src/base/template-utils.h
index 8f89672e1af..617ef6ce34b 100644
--- a/chromium/v8/src/base/template-utils.h
+++ b/chromium/v8/src/base/template-utils.h
@@ -7,6 +7,7 @@
#include <array>
#include <functional>
+#include <iosfwd>
#include <type_traits>
#include <utility>
@@ -22,6 +23,12 @@ constexpr inline auto make_array_helper(Function f,
return {{f(Indexes)...}};
}
+template <template <size_t> class Value, std::size_t... Indexes>
+constexpr inline auto make_array_helper(std::index_sequence<Indexes...>)
+ -> std::array<typename Value<0>::value_type, sizeof...(Indexes)> {
+ return {{Value<Indexes>()...}};
+}
+
} // namespace detail
// base::make_array: Create an array of fixed length, initialized by a function.
@@ -35,6 +42,13 @@ constexpr auto make_array(Function f) {
return detail::make_array_helper(f, std::make_index_sequence<Size>{});
}
+// The same as above, but taking a template instead of a function to generate
+// the values for the array.
+template <std::size_t Size, template <size_t> class Value>
+constexpr auto make_array() {
+ return detail::make_array_helper<Value>(std::make_index_sequence<Size>{});
+}
+
// Helper to determine how to pass values: Pass scalars and arrays by value,
// others by const reference (even if it was a non-const ref before; this is
// disallowed by the style guide anyway).