Commit aa667c3f by Patrick Palka

libstdc++: P2106R0 Alternative wording for GB315 and GB316

libstdc++-v3/ChangeLog:

	P2106R0 Alternative wording for GB315 and GB316
	* include/bits/ranges_algo.h (in_fun_result): New.
	(for_each_result, for_each_n_result): Change into an alias of
	in_fun_result.
	(in_in_result): New.
	(mismatch_result): Change into an alias of in_in_result.
	(copy_if_result): Change into an alias of in_out_result.
	(swap_ranges_result): Change into an alias of in_in_result.
	(unary_transform_result): Change into an alias of in_out_result.
	(in_in_out_result): New.
	(binary_transform_result): Change into an alias of in_in_out_result.
	(replace_copy_result, replace_copy_if_result, remove_copy_if_result,
	remove_copy_result, unique_copy_result, reverse_copy_result,
	rotate_copy_result, partial_sort_copy_result): Change into an alias of
	in_out_result.
	(in_out_out_result): New.
	(partition_copy_result, merge_result): Change into an alias of
	in_out_out_result.
	(set_union_result, set_intersection_result): Change into an alias of
	in_in_out_result.
	(set_difference_result): Change into an alias of in_out_result.
	(set_symmetric_difference): Change into an alias of in_in_out_result.
	(min_max_result): New.
	(minmax_result, minmax_element_result): Change into an alias of
	min_max_result.
	(in_found_result): New.
	(next_permutation_result, prev_permutation_result): Change into an alias
	of in_found_result.
	(__next_permutation_fn::operator(), __prev_permutation_fn::operator()):
	Adjust following changes to next_permutation_result and
	prev_permutation_result.
	* include/bits/ranges_algobase.h (in_out_result): New.
	(copy_result, move_result, move_backward_result, copy_backward_result,
	copy_n_result): Change into an alias of in_out_result.
	* include/bits/ranges_uninitialized.h (uninitialized_copy_result,
	uninitialized_copy_n_result, uninitialized_move_result,
	uninitialized_move_n_result): Likewise.
	* testsuite/25_algorithms/next_permutation/constrained.cc: Adjust uses of
	structured bindings.
	* testsuite/25_algorithms/prev_permutation/constrained.cc: Likewise.
parent f3169941
2020-02-17 Patrick Palka <ppalka@redhat.com> 2020-02-17 Patrick Palka <ppalka@redhat.com>
P2106R0 Alternative wording for GB315 and GB316
* include/bits/ranges_algo.h (in_fun_result): New.
(for_each_result, for_each_n_result): Change into an alias of
in_fun_result.
(in_in_result): New.
(mismatch_result): Change into an alias of in_in_result.
(copy_if_result): Change into an alias of in_out_result.
(swap_ranges_result): Change into an alias of in_in_result.
(unary_transform_result): Change into an alias of in_out_result.
(in_in_out_result): New.
(binary_transform_result): Change into an alias of in_in_out_result.
(replace_copy_result, replace_copy_if_result, remove_copy_if_result,
remove_copy_result, unique_copy_result, reverse_copy_result,
rotate_copy_result, partial_sort_copy_result): Change into an alias of
in_out_result.
(in_out_out_result): New.
(partition_copy_result, merge_result): Change into an alias of
in_out_out_result.
(set_union_result, set_intersection_result): Change into an alias of
in_in_out_result.
(set_difference_result): Change into an alias of in_out_result.
(set_symmetric_difference): Change into an alias of in_in_out_result.
(min_max_result): New.
(minmax_result, minmax_element_result): Change into an alias of
min_max_result.
(in_found_result): New.
(next_permutation_result, prev_permutation_result): Change into an alias
of in_found_result.
(__next_permutation_fn::operator(), __prev_permutation_fn::operator()):
Adjust following changes to next_permutation_result and
prev_permutation_result.
* include/bits/ranges_algobase.h (in_out_result): New.
(copy_result, move_result, move_backward_result, copy_backward_result,
copy_n_result): Change into an alias of in_out_result.
* include/bits/ranges_uninitialized.h (uninitialized_copy_result,
uninitialized_copy_n_result, uninitialized_move_result,
uninitialized_move_n_result): Likewise.
* testsuite/25_algorithms/next_permutation/constrained.cc: Adjust uses of
structured bindings.
* testsuite/25_algorithms/prev_permutation/constrained.cc: Likewise.
P1243R4 Rangify new algorithms P1243R4 Rangify new algorithms
* include/bits/ranges_algo.h (for_each_n_result, __for_each_n_fn, * include/bits/ranges_algo.h (for_each_n_result, __for_each_n_fn,
for_each_n, __sample_fn, sample, __clamp_fn, clamp): New. for_each_n, __sample_fn, sample, __clamp_fn, clamp): New.
......
...@@ -157,7 +157,7 @@ namespace ranges ...@@ -157,7 +157,7 @@ namespace ranges
inline constexpr __equal_fn equal{}; inline constexpr __equal_fn equal{};
template<typename _Iter, typename _Out> template<typename _Iter, typename _Out>
struct copy_result struct in_out_result
{ {
[[no_unique_address]] _Iter in; [[no_unique_address]] _Iter in;
[[no_unique_address]] _Out out; [[no_unique_address]] _Out out;
...@@ -165,24 +165,29 @@ namespace ranges ...@@ -165,24 +165,29 @@ namespace ranges
template<typename _Iter2, typename _Out2> template<typename _Iter2, typename _Out2>
requires convertible_to<const _Iter&, _Iter2> requires convertible_to<const _Iter&, _Iter2>
&& convertible_to<const _Out&, _Out2> && convertible_to<const _Out&, _Out2>
operator copy_result<_Iter2, _Out2>() const & constexpr
operator in_out_result<_Iter2, _Out2>() const &
{ return {in, out}; } { return {in, out}; }
template<typename _Iter2, typename _Out2> template<typename _Iter2, typename _Out2>
requires convertible_to<_Iter, _Iter2> requires convertible_to<_Iter, _Iter2>
&& convertible_to<_Out, _Out2> && convertible_to<_Out, _Out2>
operator copy_result<_Iter2, _Out2>() && constexpr
operator in_out_result<_Iter2, _Out2>() &&
{ return {std::move(in), std::move(out)}; } { return {std::move(in), std::move(out)}; }
}; };
template<typename _Iter, typename _Out> template<typename _Iter, typename _Out>
using move_result = copy_result<_Iter, _Out>; using copy_result = in_out_result<_Iter, _Out>;
template<typename _Iter, typename _Out>
using move_result = in_out_result<_Iter, _Out>;
template<typename _Iter1, typename _Iter2> template<typename _Iter1, typename _Iter2>
using move_backward_result = copy_result<_Iter1, _Iter2>; using move_backward_result = in_out_result<_Iter1, _Iter2>;
template<typename _Iter1, typename _Iter2> template<typename _Iter1, typename _Iter2>
using copy_backward_result = copy_result<_Iter1, _Iter2>; using copy_backward_result = in_out_result<_Iter1, _Iter2>;
template<bool _IsMove, template<bool _IsMove,
bidirectional_iterator _Iter, sentinel_for<_Iter> _Sent, bidirectional_iterator _Iter, sentinel_for<_Iter> _Sent,
...@@ -483,7 +488,7 @@ namespace ranges ...@@ -483,7 +488,7 @@ namespace ranges
inline constexpr __move_backward_fn move_backward{}; inline constexpr __move_backward_fn move_backward{};
template<typename _Iter, typename _Out> template<typename _Iter, typename _Out>
using copy_n_result = copy_result<_Iter, _Out>; using copy_n_result = in_out_result<_Iter, _Out>;
struct __copy_n_fn struct __copy_n_fn
{ {
......
...@@ -253,7 +253,7 @@ namespace ranges ...@@ -253,7 +253,7 @@ namespace ranges
uninitialized_value_construct_n; uninitialized_value_construct_n;
template<typename _Iter, typename _Out> template<typename _Iter, typename _Out>
using uninitialized_copy_result = copy_result<_Iter, _Out>; using uninitialized_copy_result = in_out_result<_Iter, _Out>;
struct __uninitialized_copy_fn struct __uninitialized_copy_fn
{ {
...@@ -302,7 +302,7 @@ namespace ranges ...@@ -302,7 +302,7 @@ namespace ranges
inline constexpr __uninitialized_copy_fn uninitialized_copy{}; inline constexpr __uninitialized_copy_fn uninitialized_copy{};
template<typename _Iter, typename _Out> template<typename _Iter, typename _Out>
using uninitialized_copy_n_result = uninitialized_copy_result<_Iter, _Out>; using uninitialized_copy_n_result = in_out_result<_Iter, _Out>;
struct __uninitialized_copy_n_fn struct __uninitialized_copy_n_fn
{ {
...@@ -337,7 +337,7 @@ namespace ranges ...@@ -337,7 +337,7 @@ namespace ranges
inline constexpr __uninitialized_copy_n_fn uninitialized_copy_n{}; inline constexpr __uninitialized_copy_n_fn uninitialized_copy_n{};
template<typename _Iter, typename _Out> template<typename _Iter, typename _Out>
using uninitialized_move_result = uninitialized_copy_result<_Iter, _Out>; using uninitialized_move_result = in_out_result<_Iter, _Out>;
struct __uninitialized_move_fn struct __uninitialized_move_fn
{ {
...@@ -389,7 +389,7 @@ namespace ranges ...@@ -389,7 +389,7 @@ namespace ranges
inline constexpr __uninitialized_move_fn uninitialized_move{}; inline constexpr __uninitialized_move_fn uninitialized_move{};
template<typename _Iter, typename _Out> template<typename _Iter, typename _Out>
using uninitialized_move_n_result = uninitialized_copy_result<_Iter, _Out>; using uninitialized_move_n_result = in_out_result<_Iter, _Out>;
struct __uninitialized_move_n_fn struct __uninitialized_move_n_fn
{ {
......
...@@ -41,7 +41,7 @@ test01() ...@@ -41,7 +41,7 @@ test01()
for (int j = 0; ; j++) for (int j = 0; ; j++)
{ {
auto found1 = std::next_permutation(cx.begin(), cx.end()); auto found1 = std::next_permutation(cx.begin(), cx.end());
auto [found2,last] = ranges::next_permutation(cy.begin(), cy.end()); auto [last,found2] = ranges::next_permutation(cy.begin(), cy.end());
VERIFY( found1 == found2 ); VERIFY( found1 == found2 );
VERIFY( ranges::equal(cx, cy) ); VERIFY( ranges::equal(cx, cy) );
if (!found2) if (!found2)
...@@ -55,7 +55,7 @@ test02() ...@@ -55,7 +55,7 @@ test02()
{ {
int x[] = {5, 4, 3, 2, 1}; int x[] = {5, 4, 3, 2, 1};
test_range<int, bidirectional_iterator_wrapper> rx(x); test_range<int, bidirectional_iterator_wrapper> rx(x);
auto [found,last] = ranges::next_permutation(rx, ranges::greater{}); auto [last,found] = ranges::next_permutation(rx, ranges::greater{});
VERIFY( found && last == rx.end() ); VERIFY( found && last == rx.end() );
VERIFY( last == rx.end() ); VERIFY( last == rx.end() );
VERIFY( ranges::equal(rx, (int[]){5,4,3,1,2}) ); VERIFY( ranges::equal(rx, (int[]){5,4,3,1,2}) );
......
...@@ -41,7 +41,7 @@ test01() ...@@ -41,7 +41,7 @@ test01()
for (int j = 0; ; j++) for (int j = 0; ; j++)
{ {
auto found1 = std::prev_permutation(cx.begin(), cx.end()); auto found1 = std::prev_permutation(cx.begin(), cx.end());
auto [found2,last] = ranges::prev_permutation(cy.begin(), cy.end()); auto [last,found2] = ranges::prev_permutation(cy.begin(), cy.end());
VERIFY( found1 == found2 ); VERIFY( found1 == found2 );
VERIFY( ranges::equal(cx, cy) ); VERIFY( ranges::equal(cx, cy) );
if (!found2) if (!found2)
...@@ -55,7 +55,7 @@ test02() ...@@ -55,7 +55,7 @@ test02()
{ {
int x[] = {1, 2, 3, 4, 5}; int x[] = {1, 2, 3, 4, 5};
test_range<int, bidirectional_iterator_wrapper> rx(x); test_range<int, bidirectional_iterator_wrapper> rx(x);
auto [found,last] = ranges::prev_permutation(rx, ranges::greater{}); auto [last,found] = ranges::prev_permutation(rx, ranges::greater{});
VERIFY( found && last == rx.end() ); VERIFY( found && last == rx.end() );
VERIFY( last == rx.end() ); VERIFY( last == rx.end() );
VERIFY( ranges::equal(rx, (int[]){1,2,3,5,4}) ); VERIFY( ranges::equal(rx, (int[]){1,2,3,5,4}) );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment