From Jason Turner

[alg.reverse]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpnhoquxrj/{from.md → to.md} +35 -0
tmp/tmpnhoquxrj/{from.md → to.md} RENAMED
@@ -11,10 +11,17 @@ template<bidirectional_iterator I, sentinel_for<I> S>
11
  requires permutable<I>
12
  constexpr I ranges::reverse(I first, S last);
13
  template<bidirectional_range R>
14
  requires permutable<iterator_t<R>>
15
  constexpr borrowed_iterator_t<R> ranges::reverse(R&& r);
 
 
 
 
 
 
 
16
  ```
17
 
18
  *Preconditions:* For the overloads in namespace `std`,
19
  `BidirectionalIterator` meets the *Cpp17ValueSwappable*
20
  requirements [[swappable.requirements]].
@@ -64,5 +71,33 @@ following assignment takes place:
64
  - `result + `N for the overloads in namespace `std`.
65
  - `{last, result + `N`}` for the overloads in namespace `ranges`.
66
 
67
  *Complexity:* Exactly N assignments.
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  requires permutable<I>
12
  constexpr I ranges::reverse(I first, S last);
13
  template<bidirectional_range R>
14
  requires permutable<iterator_t<R>>
15
  constexpr borrowed_iterator_t<R> ranges::reverse(R&& r);
16
+
17
+ template<execution-policy Ep, random_access_iterator I, sized_sentinel_for<I> S>
18
+ requires permutable<I>
19
+ I ranges::reverse(Ep&& exec, I first, S last);
20
+ template<execution-policy Ep, sized-random-access-range R>
21
+ requires permutable<iterator_t<R>>
22
+ borrowed_iterator_t<R> ranges::reverse(Ep&& exec, R&& r);
23
  ```
24
 
25
  *Preconditions:* For the overloads in namespace `std`,
26
  `BidirectionalIterator` meets the *Cpp17ValueSwappable*
27
  requirements [[swappable.requirements]].
 
71
  - `result + `N for the overloads in namespace `std`.
72
  - `{last, result + `N`}` for the overloads in namespace `ranges`.
73
 
74
  *Complexity:* Exactly N assignments.
75
 
76
+ ``` cpp
77
+ template<execution-policy Ep, random_access_iterator I, sized_sentinel_for<I> S,
78
+ random_access_iterator O, sized_sentinel_for<O> OutS>
79
+ requires indirectly_copyable<I, O>
80
+ ranges::reverse_copy_truncated_result<I, O>
81
+ ranges::reverse_copy(Ep&& exec, I first, S last, O result,
82
+ OutS result_last);
83
+ template<execution-policy Ep, sized-random-access-range R, sized-random-access-range OutR>
84
+ requires indirectly_copyable<iterator_t<R>, iterator_t<OutR>>
85
+ ranges::reverse_copy_truncated_result<borrowed_iterator_t<R>, borrowed_iterator_t<OutR>>
86
+ ranges::reverse_copy(Ep&& exec, R&& r, OutR&& result_r);
87
+ ```
88
+
89
+ Let N be min(`last - first`, `result_last - result`), and let
90
+ *NEW_FIRST* be `first + (last - first) - `N.
91
+
92
+ *Preconditions:* The ranges \[`first`, `last`) and \[`result`,
93
+ `result + `N) do not overlap.
94
+
95
+ *Effects:* Copies the range \[*`NEW_FIRST`*, `last`) to the range
96
+ \[`result`, `result + `N) such that for every non-negative integer i < N
97
+ the following assignment takes place:
98
+ `*(result + `N` - 1 - `i`) = *(`*`NEW_FIRST`*` + `i`)`.
99
+
100
+ *Returns:* `{last, `*`NEW_FIRST`*`, result + `N`}`.
101
+
102
+ *Complexity:* Exactly N assignments.
103
+