@@ -111,7 +111,8 @@ class Vec {
111
111
// / Constructs a vector by taking all the elements from the iterator.
112
112
// /
113
113
// / sus::iter::FromIterator trait.
114
- static constexpr Vec from_iter (::sus::iter::IntoIterator<T> auto && into_iter) noexcept
114
+ static constexpr Vec from_iter (
115
+ ::sus::iter::IntoIterator<T> auto && into_iter) noexcept
115
116
requires(::sus::mem::Move<T> && !std::is_reference_v<T>)
116
117
{
117
118
auto && iter = sus::move (into_iter).into_iter ();
@@ -274,8 +275,8 @@ class Vec {
274
275
} else {
275
276
auto * const new_storage =
276
277
static_cast <T*>(malloc (bytes.primitive_value ));
277
- auto * old_t = reinterpret_cast <T*>( storage_) ;
278
- auto * new_t = reinterpret_cast <T*>( new_storage) ;
278
+ T * old_t = storage_;
279
+ T * new_t = new_storage;
279
280
const size_t len = size_t {len_};
280
281
for (auto i = size_t {0 }; i < len; ++i) {
281
282
new (new_t ) T (::sus::move (*old_t ));
@@ -341,7 +342,7 @@ class Vec {
341
342
{
342
343
check (!is_moved_from ());
343
344
reserve (1_usize);
344
- new (as_mut_ptr () + size_t {len_}) T (::sus::move (t));
345
+ new (&storage_[ size_t {len_}] ) T (::sus::move (t));
345
346
len_ += 1_usize;
346
347
}
347
348
@@ -366,7 +367,7 @@ class Vec {
366
367
{
367
368
check (!is_moved_from ());
368
369
reserve (1_usize);
369
- new (as_mut_ptr () + size_t {len_}) T (::sus::forward<Us>(args)...);
370
+ new (&storage_[ size_t {len_}] ) T (::sus::forward<Us>(args)...);
370
371
len_ += 1_usize;
371
372
}
372
373
@@ -399,7 +400,7 @@ class Vec {
399
400
// / will be invalid and Undefined Behaviour results.
400
401
constexpr inline const T& get_unchecked (::sus::marker::UnsafeFnMarker,
401
402
usize i) const & noexcept {
402
- return reinterpret_cast <T*>( storage_) [i.primitive_value ];
403
+ return storage_[i.primitive_value ];
403
404
}
404
405
constexpr inline const T& get_unchecked (::sus::marker::UnsafeFnMarker,
405
406
usize i) && = delete;
@@ -411,7 +412,7 @@ class Vec {
411
412
// / Behaviour results.
412
413
constexpr inline T& get_unchecked_mut (::sus::marker::UnsafeFnMarker,
413
414
usize i) & noexcept {
414
- return reinterpret_cast <T*>( storage_) [i.primitive_value ];
415
+ return storage_[i.primitive_value ];
415
416
}
416
417
417
418
// / Present a nicer error when trying to use operator[] with an `int`,
@@ -461,7 +462,7 @@ class Vec {
461
462
inline const T* as_ptr () const & noexcept {
462
463
check (!is_moved_from ());
463
464
check (is_alloced ());
464
- return reinterpret_cast <T*>( storage_) ;
465
+ return storage_;
465
466
}
466
467
const T* as_ptr () && = delete;
467
468
@@ -472,7 +473,7 @@ class Vec {
472
473
inline T* as_mut_ptr () & noexcept {
473
474
check (!is_moved_from ());
474
475
check (is_alloced ());
475
- return reinterpret_cast <T*>( storage_) ;
476
+ return storage_;
476
477
}
477
478
478
479
// Returns a slice that references all the elements of the vector as const
@@ -481,8 +482,8 @@ class Vec {
481
482
check (!is_moved_from ());
482
483
// SAFETY: The `len_` is the number of elements in the Vec, and the pointer
483
484
// is to the start of the Vec, so this Slice covers a valid range.
484
- return Slice<const T>::from_raw_parts (
485
- ::sus::marker::unsafe_fn, reinterpret_cast < const T*>(storage_), len_);
485
+ return Slice<const T>::from_raw_parts (::sus::marker::unsafe_fn, storage_,
486
+ len_);
486
487
}
487
488
constexpr Slice<const T> as_ref () && = delete;
488
489
@@ -492,17 +493,15 @@ class Vec {
492
493
check (!is_moved_from ());
493
494
// SAFETY: The `len_` is the number of elements in the Vec, and the pointer
494
495
// is to the start of the Vec, so this Slice covers a valid range.
495
- return Slice<T>::from_raw_parts (::sus::marker::unsafe_fn,
496
- reinterpret_cast <T*>(storage_), len_);
496
+ return Slice<T>::from_raw_parts (::sus::marker::unsafe_fn, storage_, len_);
497
497
}
498
498
499
499
// / Returns an iterator over all the elements in the array, visited in the
500
500
// / same order they appear in the array. The iterator gives const access to
501
501
// / each element.
502
502
constexpr SliceIter<const T&> iter () const & noexcept {
503
503
check (!is_moved_from ());
504
- return SliceIter<const T&>::with (reinterpret_cast <const T*>(storage_),
505
- len_);
504
+ return SliceIter<const T&>::with (storage_, len_);
506
505
}
507
506
constexpr SliceIter<const T&> iter () && = delete;
508
507
@@ -511,7 +510,7 @@ class Vec {
511
510
// / each element.
512
511
constexpr SliceIterMut<T&> iter_mut () & noexcept {
513
512
check (!is_moved_from ());
514
- return SliceIterMut<T&>::with (reinterpret_cast <T*>( storage_) , len_);
513
+ return SliceIterMut<T&>::with (storage_, len_);
515
514
}
516
515
517
516
// / Converts the array into an iterator that consumes the array and returns
@@ -540,8 +539,7 @@ class Vec {
540
539
inline void destroy_storage_objects () {
541
540
if constexpr (!std::is_trivially_destructible_v<T>) {
542
541
const size_t len = size_t {len_};
543
- for (auto i = size_t {0 }; i < len; ++i)
544
- reinterpret_cast <T*>(storage_)[i].~T ();
542
+ for (auto i = size_t {0 }; i < len; ++i) storage_[i].~T ();
545
543
}
546
544
}
547
545
0 commit comments