diff options
author | mikhnenko <[email protected]> | 2023-11-15 21:10:56 +0300 |
---|---|---|
committer | mikhnenko <[email protected]> | 2023-11-15 22:24:51 +0300 |
commit | 401253f291059c8eb079c95e469cc73af2dc2af5 (patch) | |
tree | d8135d1197aaeab6daa5c9dbde39a5916ee98f1d /contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_move.h | |
parent | 8e70c7251e94222a2475b7d9b2025b5c33cfd6c1 (diff) |
Upd libc++ to 01 July 2022 da1609ad73540978f66111e96ea500b97ca9b39a
```
[libc++] Improve the formatting of static_assert messages
[libc++] Remove dead code and unneeded C++03 specializations from type_traits
[libc++] Implement P0618R0 (Deprecating <codecvt>)
[libc++] Disentangle _If, _Or and _And
Uglify __support/xlocale
[libc++][format] Improve pointer formatters.
[libc++][format] Improve integral formatters.
[libc++] Fix signature of main() in tests
[libc++][ranges] Finish LWG issues directly related to the One Ranges Proposal.
[libc++] Re-add transitive includes that had been removed since LLVM 14
[libc++] Add a few missing min/max macro push/pop
[libc++] Remove dummy command in Dockerfile
[libc++] Use bounded iterators in std::span when the debug mode is enabled
[libc++] Improve Lit's buildhost=XXXX feature on a few platforms
[libc++] Simplify type_traits and use more builtins
[libc++] P2321R2 section [tuple.tuple]. Adding C++23 constructors, assignment operators and swaps to `tuple`
[libc++][AIX] Make basic_string layout compatible with earlier version
[libcxx][test] Suppress complex<int> warnings when testing MSVC
[libc++] Add a test to pin down the set of transitive public includes
[libc++][format] Copy code to new location.
[libc++] Implement ranges::move{, _backward}
[libc++] Implement P0154R1 (Hardware inference size)
[libc++] Simplify the visibility attributes
[libc++] Clarify std::function release note
[libc++] Reduces std::to_chars instantiations.
[libc++] Fixesbuild.
[libc++] fix views::all hard error on lvalue move only views instead of SFINAE
[libc++] Complete the implementation of N4190
[libc++] Remove std::function in C++03
[libc++][format] Improve string formatters
[libc++] Pass -fno-modules to clang-tidy instead of disabling it for the modules build
[libc++][clang-tidy] Enable bugprone-use-after-move and explicitly list all used checks
[libc++] Improve charconv base10 algorithm.
[libc++][format] Improves the handle test.
[libc++] Implement P0174R2 (Deprecating Vestigial Library Parts in C++17)
```
Diffstat (limited to 'contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_move.h')
-rw-r--r-- | contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_move.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_move.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_move.h new file mode 100644 index 00000000000..ad4342d7c98 --- /dev/null +++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_move.h @@ -0,0 +1,83 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP___ALGORITHM_RANGES_MOVE_H +#define _LIBCPP___ALGORITHM_RANGES_MOVE_H + +#include <__algorithm/in_out_result.h> +#include <__algorithm/move.h> +#include <__config> +#include <__iterator/concepts.h> +#include <__iterator/iter_move.h> +#include <__ranges/access.h> +#include <__ranges/concepts.h> +#include <__ranges/dangling.h> +#include <__utility/move.h> + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +#endif + +#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES) + +_LIBCPP_BEGIN_NAMESPACE_STD + +namespace ranges { + +template <class _InIter, class _OutIter> +using move_result = in_out_result<_InIter, _OutIter>; + +namespace __move { +struct __fn { + + template <class _InIter, class _Sent, class _OutIter> + requires __iter_move::__move_deref<_InIter> // check that we are allowed to std::move() the value + _LIBCPP_HIDE_FROM_ABI constexpr static + move_result<_InIter, _OutIter> __move_impl(_InIter __first, _Sent __last, _OutIter __result) { + auto __ret = std::__move(std::move(__first), std::move(__last), std::move(__result)); + return {std::move(__ret.first), std::move(__ret.second)}; + } + + template <class _InIter, class _Sent, class _OutIter> + _LIBCPP_HIDE_FROM_ABI constexpr static + move_result<_InIter, _OutIter> __move_impl(_InIter __first, _Sent __last, _OutIter __result) { + while (__first != __last) { + *__result = ranges::iter_move(__first); + ++__first; + ++__result; + } + return {std::move(__first), std::move(__result)}; + } + + template <input_iterator _InIter, sentinel_for<_InIter> _Sent, weakly_incrementable _OutIter> + requires indirectly_movable<_InIter, _OutIter> + _LIBCPP_HIDE_FROM_ABI constexpr + move_result<_InIter, _OutIter> operator()(_InIter __first, _Sent __last, _OutIter __result) const { + return __move_impl(std::move(__first), std::move(__last), std::move(__result)); + } + + template <input_range _Range, weakly_incrementable _OutIter> + requires indirectly_movable<iterator_t<_Range>, _OutIter> + _LIBCPP_HIDE_FROM_ABI constexpr + move_result<borrowed_iterator_t<_Range>, _OutIter> operator()(_Range&& __range, _OutIter __result) const { + return __move_impl(ranges::begin(__range), ranges::end(__range), std::move(__result)); + } + +}; +} // namespace __move + +inline namespace __cpo { + inline constexpr auto move = __move::__fn{}; +} // namespace __cpo +} // namespace ranges + +_LIBCPP_END_NAMESPACE_STD + +#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES) + +#endif // _LIBCPP___ALGORITHM_RANGES_MOVE_H |