From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- dom/canvas/TupleUtils.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 dom/canvas/TupleUtils.h (limited to 'dom/canvas/TupleUtils.h') diff --git a/dom/canvas/TupleUtils.h b/dom/canvas/TupleUtils.h new file mode 100644 index 0000000000..f5fe19378b --- /dev/null +++ b/dom/canvas/TupleUtils.h @@ -0,0 +1,64 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef DOM_CANVAS_TUPLE_UTILS_H +#define DOM_CANVAS_TUPLE_UTILS_H + +#include + +namespace mozilla { + +// - +// ToTupleOfConstRefs + +template +constexpr const auto& ToConstRef1(T& ret) { + return ret; +} + +template +constexpr auto ToTupleOfConstRefsN(const Tup& tup, + const std::index_sequence&) { + return std::tie(ToConstRef1(std::get(tup))...); +} + +template > +constexpr auto ToTupleOfConstRefs(const Tup& tup) { + return ToTupleOfConstRefsN( + tup, std::make_index_sequence>()); +} + +// - +// MapTuple + +template +constexpr auto MapTupleN(Tup&& tup, Callable&& fn, + const std::index_sequence&) { + return std::make_tuple(fn(std::get(tup))...); +} + +/// Callable::operator()(T) cannot return void or you will get weird errors. +template > +constexpr auto MapTuple(Tup&& t, Callable&& fn) { + using Tup2 = typename std::remove_reference::type; + return MapTupleN(t, fn, std::make_index_sequence>()); +} + +// - + +template +struct SizeofTupleArgs; + +// c++17 fold expressions make this easy, once we pull out the Args parameter +// pack by constraining the default template: +template +struct SizeofTupleArgs> + : std::integral_constant {}; + +static_assert(SizeofTupleArgs>::value == + sizeof(size_t) + 3); + +} // namespace mozilla + +#endif // DOM_CANVAS_TUPLE_UTILS_H -- cgit v1.2.3