From Jason Turner

[range.reverse.view]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpgk2jryrm/{from.md → to.md} +73 -0
tmp/tmpgk2jryrm/{from.md → to.md} RENAMED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Class template `reverse_view` <a id="range.reverse.view">[[range.reverse.view]]</a>
2
+
3
+ ``` cpp
4
+ namespace std::ranges {
5
+ template<view V>
6
+ requires bidirectional_range<V>
7
+ class reverse_view : public view_interface<reverse_view<V>> {
8
+ private:
9
+ V base_ = V(); // exposition only
10
+ public:
11
+ reverse_view() = default;
12
+
13
+ constexpr explicit reverse_view(V r);
14
+
15
+ constexpr V base() const& requires copy_constructible<V> { return base_; }
16
+ constexpr V base() && { return std::move(base_); }
17
+
18
+ constexpr reverse_iterator<iterator_t<V>> begin();
19
+ constexpr reverse_iterator<iterator_t<V>> begin() requires common_range<V>;
20
+ constexpr auto begin() const requires common_range<const V>;
21
+
22
+ constexpr reverse_iterator<iterator_t<V>> end();
23
+ constexpr auto end() const requires common_range<const V>;
24
+
25
+ constexpr auto size() requires sized_range<V> {
26
+ return ranges::size(base_);
27
+ }
28
+ constexpr auto size() const requires sized_range<const V> {
29
+ return ranges::size(base_);
30
+ }
31
+ };
32
+
33
+ template<class R>
34
+ reverse_view(R&&) -> reverse_view<views::all_t<R>>;
35
+ }
36
+ ```
37
+
38
+ ``` cpp
39
+ constexpr explicit reverse_view(V base);
40
+ ```
41
+
42
+ *Effects:* Initializes *base\_* with `std::move(base)`.
43
+
44
+ ``` cpp
45
+ constexpr reverse_iterator<iterator_t<V>> begin();
46
+ ```
47
+
48
+ *Returns:*
49
+
50
+ ``` cpp
51
+ make_reverse_iterator(ranges::next(ranges::begin(base_), ranges::end(base_)))
52
+ ```
53
+
54
+ *Remarks:* In order to provide the amortized constant time complexity
55
+ required by the `range` concept, this function caches the result within
56
+ the `reverse_view` for use on subsequent calls.
57
+
58
+ ``` cpp
59
+ constexpr reverse_iterator<iterator_t<V>> begin() requires common_range<V>;
60
+ constexpr auto begin() const requires common_range<const V>;
61
+ ```
62
+
63
+ *Effects:* Equivalent to:
64
+ `return make_reverse_iterator(ranges::end(base_));`
65
+
66
+ ``` cpp
67
+ constexpr reverse_iterator<iterator_t<V>> end();
68
+ constexpr auto end() const requires common_range<const V>;
69
+ ```
70
+
71
+ *Effects:* Equivalent to:
72
+ `return make_reverse_iterator(ranges::begin(base_));`
73
+