From Jason Turner

[range.transform.view]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpfssro9ot/{from.md → to.md} +122 -0
tmp/tmpfssro9ot/{from.md → to.md} RENAMED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Class template `transform_view` <a id="range.transform.view">[[range.transform.view]]</a>
2
+
3
+ ``` cpp
4
+ namespace std::ranges {
5
+ template<input_range V, copy_constructible F>
6
+ requires view<V> && is_object_v<F> &&
7
+ regular_invocable<F&, range_reference_t<V>> &&
8
+ can-reference<invoke_result_t<F&, range_reference_t<V>>>
9
+ class transform_view : public view_interface<transform_view<V, F>> {
10
+ private:
11
+ // [range.transform.iterator], class template transform_view::iterator
12
+ template<bool> struct iterator; // exposition only
13
+ // [range.transform.sentinel], class template transform_view::sentinel
14
+ template<bool> struct sentinel; // exposition only
15
+
16
+ V base_ = V(); // exposition only
17
+ semiregular-box<F> fun_; // exposition only
18
+
19
+ public:
20
+ transform_view() = default;
21
+ constexpr transform_view(V base, F fun);
22
+
23
+ constexpr V base() const& requires copy_constructible<V> { return base_; }
24
+ constexpr V base() && { return std::move(base_); }
25
+
26
+ constexpr iterator<false> begin();
27
+ constexpr iterator<true> begin() const
28
+ requires range<const V> &&
29
+ regular_invocable<const F&, range_reference_t<const V>>;
30
+
31
+ constexpr sentinel<false> end();
32
+ constexpr iterator<false> end() requires common_range<V>;
33
+ constexpr sentinel<true> end() const
34
+ requires range<const V> &&
35
+ regular_invocable<const F&, range_reference_t<const V>>;
36
+ constexpr iterator<true> end() const
37
+ requires common_range<const V> &&
38
+ regular_invocable<const F&, range_reference_t<const V>>;
39
+
40
+ constexpr auto size() requires sized_range<V> { return ranges::size(base_); }
41
+ constexpr auto size() const requires sized_range<const V>
42
+ { return ranges::size(base_); }
43
+ };
44
+
45
+ template<class R, class F>
46
+ transform_view(R&&, F) -> transform_view<views::all_t<R>, F>;
47
+ }
48
+ ```
49
+
50
+ ``` cpp
51
+ constexpr transform_view(V base, F fun);
52
+ ```
53
+
54
+ *Effects:* Initializes *base\_* with `std::move(base)` and *fun\_* with
55
+ `std::move(fun)`.
56
+
57
+ ``` cpp
58
+ constexpr iterator<false> begin();
59
+ ```
60
+
61
+ *Effects:* Equivalent to:
62
+
63
+ ``` cpp
64
+ return iterator<false>{*this, ranges::begin(base_)};
65
+ ```
66
+
67
+ ``` cpp
68
+ constexpr iterator<true> begin() const
69
+ requires range<const V> &&
70
+ regular_invocable<const F&, range_reference_t<const V>>;
71
+ ```
72
+
73
+ *Effects:* Equivalent to:
74
+
75
+ ``` cpp
76
+ return iterator<true>{*this, ranges::begin(base_)};
77
+ ```
78
+
79
+ ``` cpp
80
+ constexpr sentinel<false> end();
81
+ ```
82
+
83
+ *Effects:* Equivalent to:
84
+
85
+ ``` cpp
86
+ return sentinel<false>{ranges::end(base_)};
87
+ ```
88
+
89
+ ``` cpp
90
+ constexpr iterator<false> end() requires common_range<V>;
91
+ ```
92
+
93
+ *Effects:* Equivalent to:
94
+
95
+ ``` cpp
96
+ return iterator<false>{*this, ranges::end(base_)};
97
+ ```
98
+
99
+ ``` cpp
100
+ constexpr sentinel<true> end() const
101
+ requires range<const V> &&
102
+ regular_invocable<const F&, range_reference_t<const V>>;
103
+ ```
104
+
105
+ *Effects:* Equivalent to:
106
+
107
+ ``` cpp
108
+ return sentinel<true>{ranges::end(base_)};
109
+ ```
110
+
111
+ ``` cpp
112
+ constexpr iterator<true> end() const
113
+ requires common_range<const V> &&
114
+ regular_invocable<const F&, range_reference_t<const V>>;
115
+ ```
116
+
117
+ *Effects:* Equivalent to:
118
+
119
+ ``` cpp
120
+ return iterator<true>{*this, ranges::end(base_)};
121
+ ```
122
+