Skip to content

Commit 0246a72

Browse files
authored
update c++ headers (#214)
1 parent 73df013 commit 0246a72

File tree

2 files changed

+55
-12
lines changed

2 files changed

+55
-12
lines changed

include/mir/ndslice.h

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,21 @@ enum class mir_slice_kind : int
4040
contiguous = 2
4141
};
4242

43+
template <typename T>
44+
struct mir_rci;
45+
46+
namespace mir {
47+
template <
48+
typename T
49+
>
50+
const T* light_const(const T* ptr) { return ptr; }
51+
52+
template <
53+
typename T
54+
>
55+
mir_rci<const T> light_const(const mir_rci<T>& s);
56+
}
57+
4358
template <
4459
typename Iterator,
4560
mir_size_t N = 1,
@@ -172,12 +187,12 @@ struct mir_slice<Iterator, 2, mir_slice_kind::contiguous>
172187

173188
auto begin() const noexcept
174189
{
175-
return _iterator;
190+
return mir::light_const(_iterator);
176191
}
177192

178193
auto cbegin() const noexcept
179194
{
180-
return _iterator;
195+
return begin();
181196
}
182197

183198
Iterator end() noexcept
@@ -187,12 +202,12 @@ struct mir_slice<Iterator, 2, mir_slice_kind::contiguous>
187202

188203
auto end() const noexcept
189204
{
190-
return _iterator + _lengths[0] * _lengths[1];
205+
return mir::light_const(_iterator) + _lengths[0] * _lengths[1];
191206
}
192207

193208
auto cend() const noexcept
194209
{
195-
return _iterator + _lengths[0] * _lengths[1];
210+
return end();
196211
}
197212
};
198213

@@ -205,6 +220,11 @@ struct mir_slice<Iterator, 1, mir_slice_kind::contiguous>
205220
static const mir_ptrdiff_t _strides[0];
206221
Iterator _iterator = nullptr;
207222

223+
using iterator = Iterator;
224+
using const_iterator = Iterator;
225+
using reverse_iterator = std::reverse_iterator<iterator>;
226+
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
227+
208228
template <unsigned int d = 0>
209229
size_t size() const noexcept
210230
{
@@ -247,6 +267,11 @@ struct mir_slice<Iterator, 1, mir_slice_kind::contiguous>
247267
return _iterator;
248268
}
249269

270+
auto begin() const noexcept
271+
{
272+
return mir::light_const(_iterator);
273+
}
274+
250275
auto cbegin() const noexcept
251276
{
252277
return _iterator;
@@ -257,10 +282,22 @@ struct mir_slice<Iterator, 1, mir_slice_kind::contiguous>
257282
return _iterator + _lengths[0];
258283
}
259284

285+
auto end() const noexcept
286+
{
287+
return mir::light_const(_iterator) + _lengths[0];
288+
}
289+
260290
auto cend() const noexcept
261291
{
262-
return _iterator + _lengths[0];
292+
return end();
263293
}
294+
295+
reverse_iterator rbegin() noexcept { return reverse_iterator(this->begin()); }
296+
const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(this->begin()); }
297+
const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(this->begin()); }
298+
reverse_iterator rend() noexcept { return reverse_iterator(this->end()); }
299+
const_reverse_iterator rend() const noexcept { return const_reverse_iterator(this->end()); }
300+
const_reverse_iterator crend() const noexcept { return const_reverse_iterator(this->end()); }
264301
};
265302

266303
template <
@@ -312,11 +349,6 @@ struct mir_slice<Iterator, 1, mir_slice_kind::universal>
312349

313350
namespace mir
314351
{
315-
template <
316-
typename T
317-
>
318-
const T* light_const(const T* ptr) { return ptr; }
319-
320352
template <
321353
typename T,
322354
mir_size_t N,

include/mir/rcarray.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,12 @@ struct mir_rci
187187
using Iterator = T*;
188188
using Array = mir_rcarray<T>;
189189

190+
using difference_type = ptrdiff_t;
191+
using value_type = T;
192+
using pointer = T*;
193+
using reference = T&;
194+
using iterator_category = std::random_access_iterator_tag;
195+
190196
Iterator _iterator = nullptr;
191197
mir_rcarray<T> _array;
192198

@@ -237,13 +243,13 @@ struct mir_rci
237243
return *this;
238244
}
239245

240-
mir_rci& operator+=(mir_ptrdiff_t shift)
246+
mir_rci& operator+=(ptrdiff_t shift)
241247
{
242248
_iterator += shift;
243249
return *this;
244250
}
245251

246-
mir_rci& operator-=(mir_ptrdiff_t shift)
252+
mir_rci& operator-=(ptrdiff_t shift)
247253
{
248254
_iterator -= shift;
249255
return *this;
@@ -263,6 +269,11 @@ struct mir_rci
263269
return ret;
264270
}
265271

272+
ptrdiff_t operator-(const mir_rci& shift)
273+
{
274+
return _iterator - shift._iterator;
275+
}
276+
266277
T& operator[](size_t index)
267278
{
268279
auto ptr = _iterator + index;

0 commit comments

Comments
 (0)