diff options
author | Xin Li <delphij@google.com> | 2024-01-17 22:13:58 -0800 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2024-01-17 22:13:58 -0800 |
commit | 28d03a2a1cabbe01d7bcb6cf5166c10e50d3c2c6 (patch) | |
tree | c1643be8ab17fc607cea748a8bb1d621a5964873 /pw_minimal_cpp_stdlib/public/pw_minimal_cpp_stdlib/internal/utility.h | |
parent | ec2628a6ba2d0ecbe3ac10c8c772f6fc6acc345d (diff) | |
parent | f054515492af5132f685cb23fe11891ee77104c9 (diff) | |
download | pigweed-28d03a2a1cabbe01d7bcb6cf5166c10e50d3c2c6.tar.gz |
Merge Android 24Q1 Release (ab/11220357)temp_319669529
Bug: 319669529
Merged-In: Iba357b308a79d0c8b560acd4f72b5423c9c83294
Change-Id: Icdf552029fb97a34e83c6dd7799433fc473a2506
Diffstat (limited to 'pw_minimal_cpp_stdlib/public/pw_minimal_cpp_stdlib/internal/utility.h')
-rw-r--r-- | pw_minimal_cpp_stdlib/public/pw_minimal_cpp_stdlib/internal/utility.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/pw_minimal_cpp_stdlib/public/pw_minimal_cpp_stdlib/internal/utility.h b/pw_minimal_cpp_stdlib/public/pw_minimal_cpp_stdlib/internal/utility.h new file mode 100644 index 000000000..a5a65343e --- /dev/null +++ b/pw_minimal_cpp_stdlib/public/pw_minimal_cpp_stdlib/internal/utility.h @@ -0,0 +1,66 @@ +// Copyright 2020 The Pigweed Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy of +// the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +#pragma once + +#include <type_traits> + +#include "pw_polyfill/standard_library/namespace.h" + +_PW_POLYFILL_BEGIN_NAMESPACE_STD + +template <typename T> +constexpr remove_reference_t<T>&& move(T&& object) { + return (remove_reference_t<T>&&)object; +} + +template <typename T> +constexpr T&& forward(remove_reference_t<T>& value) { + return static_cast<T&&>(value); +} + +template <typename T> +constexpr T&& forward(remove_reference_t<T>&& value) { + return static_cast<T&&>(value); +} + +// Forward declare these classes, which are specialized in other headers. +template <decltype(sizeof(0)), typename> +struct tuple_element; + +template <typename> +struct tuple_size; + +template <typename T, T... kSequence> +class integer_sequence; + +template <decltype(sizeof(0))... kSequence> +using index_sequence = integer_sequence<decltype(sizeof(0)), kSequence...>; + +template <typename T, T kEnd> +#if __has_builtin(__make_integer_seq) +using make_integer_sequence = __make_integer_seq<integer_sequence, T, kEnd>; +#elif __has_builtin(__integer_pack) +using make_integer_sequence = integer_sequence<T, __integer_pack(kEnd)...>; +#endif // make_integer_sequence + +template <decltype(sizeof(0)) kEnd> +using make_index_sequence = make_integer_sequence<decltype(sizeof(0)), kEnd>; + +struct in_place_t { + explicit constexpr in_place_t() = default; +}; + +inline constexpr in_place_t in_place{}; + +_PW_POLYFILL_END_NAMESPACE_STD |