From Jason Turner

[simd.iterator]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp7o3ndpk7/{from.md → to.md} +186 -0
tmp/tmp7o3ndpk7/{from.md → to.md} RENAMED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Class template *`simd-iterator`* <a id="simd.iterator">[[simd.iterator]]</a>
2
+
3
+ ``` cpp
4
+ namespace std::simd {
5
+ template<class V>
6
+ class simd-iterator { // exposition only
7
+ V* data_ = nullptr; // exposition only
8
+ simd-size-type offset_ = 0; // exposition only
9
+
10
+ constexpr simd-iterator(V& d, simd-size-type off) noexcept; // exposition only
11
+
12
+ public:
13
+ using value_type = V::value_type;
14
+ using iterator_category = input_iterator_tag;
15
+ using iterator_concept = random_access_iterator_tag;
16
+ using difference_type = simd-size-type;
17
+
18
+ constexpr simd-iterator() = default;
19
+
20
+ constexpr simd-iterator(const simd-iterator&) = default;
21
+ constexpr simd-iterator& operator=(const simd-iterator&) = default;
22
+
23
+ constexpr simd-iterator(const simd-iterator<remove_const_t<V>>&) requires is_const_v<V>;
24
+
25
+ constexpr value_type operator*() const;
26
+
27
+ constexpr simd-iterator& operator++();
28
+ constexpr simd-iterator operator++(int);
29
+ constexpr simd-iterator& operator--();
30
+ constexpr simd-iterator operator--(int);
31
+
32
+ constexpr simd-iterator& operator+=(difference_type n);
33
+ constexpr simd-iterator& operator-=(difference_type n);
34
+
35
+ constexpr value_type operator[](difference_type n) const;
36
+
37
+ friend constexpr bool operator==(simd-iterator a, simd-iterator b) = default;
38
+ friend constexpr bool operator==(simd-iterator a, default_sentinel_t) noexcept;
39
+ friend constexpr auto operator<=>(simd-iterator a, simd-iterator b);
40
+
41
+ friend constexpr simd-iterator operator+(simd-iterator i, difference_type n);
42
+ friend constexpr simd-iterator operator+(difference_type n, simd-iterator i);
43
+ friend constexpr simd-iterator operator-(simd-iterator i, difference_type n);
44
+
45
+ friend constexpr difference_type operator-(simd-iterator a, simd-iterator b);
46
+ friend constexpr difference_type operator-(simd-iterator i, default_sentinel_t) noexcept;
47
+ friend constexpr difference_type operator-(default_sentinel_t, simd-iterator i) noexcept;
48
+ };
49
+ }
50
+ ```
51
+
52
+ ``` cpp
53
+ constexpr simd-iterator(V& d, simd-size-type off) noexcept;
54
+ ```
55
+
56
+ *Effects:* Initializes *data\_* with `addressof(d)` and *offset\_* with
57
+ `off`.
58
+
59
+ ``` cpp
60
+ constexpr simd-iterator(const simd-iterator<remove_const_t<V>>& i) requires is_const_v<V>;
61
+ ```
62
+
63
+ *Effects:* Initializes *data\_* with `i.`*`data_`* and *offset\_* with
64
+ `i.`*`offset_`*.
65
+
66
+ ``` cpp
67
+ constexpr value_type operator*() const;
68
+ ```
69
+
70
+ *Effects:* Equivalent to: `return (*`*`data_`*`)[`*`offset_`*`];`
71
+
72
+ ``` cpp
73
+ constexpr simd-iterator& operator++();
74
+ ```
75
+
76
+ *Effects:* Equivalent to: `return *this += 1;`
77
+
78
+ ``` cpp
79
+ constexpr simd-iterator operator++(int);
80
+ ```
81
+
82
+ *Effects:* Equivalent to:
83
+
84
+ ``` cpp
85
+ simd-iterator tmp = *this;
86
+ *this += 1;
87
+ return tmp;
88
+ ```
89
+
90
+ ``` cpp
91
+ constexpr simd-iterator& operator--();
92
+ ```
93
+
94
+ *Effects:* Equivalent to: `return *this -= 1;`
95
+
96
+ ``` cpp
97
+ constexpr simd-iterator operator--(int);
98
+ ```
99
+
100
+ *Effects:* Equivalent to:
101
+
102
+ ``` cpp
103
+ simd-iterator tmp = *this;
104
+ *this -= 1;
105
+ return tmp;
106
+ ```
107
+
108
+ ``` cpp
109
+ constexpr simd-iterator& operator+=(difference_type n);
110
+ ```
111
+
112
+ *Preconditions:* *`offset_`*` + n` is in the range \[`0`, `V::size()`\].
113
+
114
+ *Effects:* Equivalent to:
115
+
116
+ ``` cpp
117
+ offset_ += n;
118
+ return *this;
119
+ ```
120
+
121
+ ``` cpp
122
+ constexpr simd-iterator& operator-=(difference_type n);
123
+ ```
124
+
125
+ *Preconditions:* *`offset_`*` - n` is in the range \[`0`, `V::size()`\].
126
+
127
+ *Effects:* Equivalent to:
128
+
129
+ ``` cpp
130
+ offset_ -= n;
131
+ return *this;
132
+ ```
133
+
134
+ ``` cpp
135
+ constexpr value_type operator[](difference_type n) const;
136
+ ```
137
+
138
+ *Effects:* Equivalent to: `return (*`*`data_`*`)[`*`offset_`*` + n];`
139
+
140
+ ``` cpp
141
+ friend constexpr bool operator==(simd-iterator i, default_sentinel_t) noexcept;
142
+ ```
143
+
144
+ *Effects:* Equivalent to: `return i.`*`offset_`*` == V::size();`
145
+
146
+ ``` cpp
147
+ friend constexpr auto operator<=>(simd-iterator a, simd-iterator b);
148
+ ```
149
+
150
+ *Preconditions:* `a.`*`data_`*` == b.`*`data_`* is `true`.
151
+
152
+ *Effects:* Equivalent to: `return a.`*`offset_`*` <=> b.`*`offset_`*`;`
153
+
154
+ ``` cpp
155
+ friend constexpr simd-iterator operator+(simd-iterator i, difference_type n);
156
+ friend constexpr simd-iterator operator+(difference_type n, simd-iterator i);
157
+ ```
158
+
159
+ *Effects:* Equivalent to: `return i += n;`
160
+
161
+ ``` cpp
162
+ friend constexpr simd-iterator operator-(simd-iterator i, difference_type n);
163
+ ```
164
+
165
+ *Effects:* Equivalent to: `return i -= n;`
166
+
167
+ ``` cpp
168
+ friend constexpr difference_type operator-(simd-iterator a, simd-iterator b);
169
+ ```
170
+
171
+ *Preconditions:* `a.`*`data_`*` == b.`*`data_`* is `true`.
172
+
173
+ *Effects:* Equivalent to: `return a.`*`offset_`*` - b.`*`offset_`*`;`
174
+
175
+ ``` cpp
176
+ friend constexpr difference_type operator-(simd-iterator i, default_sentinel_t) noexcept;
177
+ ```
178
+
179
+ *Effects:* Equivalent to: `return i.`*`offset_`*` - V::size();`
180
+
181
+ ``` cpp
182
+ friend constexpr difference_type operator-(default_sentinel_t, simd-iterator i) noexcept;
183
+ ```
184
+
185
+ *Effects:* Equivalent to: `return V::size() - i.`*`offset_`*`;`
186
+