Skip to content

Commit 45d3535

Browse files
committed
update __data and __size
1 parent 267331e commit 45d3535

File tree

2 files changed

+37
-28
lines changed

2 files changed

+37
-28
lines changed

include/beman/inplace_vector/inplace_vector.hpp

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@ namespace beman::details::inplace_vector::storage {
348348
template <class T> struct zero_sized {
349349
protected:
350350
using size_type = uint8_t;
351-
static constexpr T *__data() noexcept { return nullptr; }
352-
static constexpr size_type __size() noexcept { return 0; }
351+
static constexpr T *storage_data() noexcept { return nullptr; }
352+
static constexpr size_type storage_size() noexcept { return 0; }
353353
static constexpr void unsafe_set_size(size_t new_size) noexcept {
354354
__IV_EXPECT(new_size == 0 &&
355355
"tried to change size of empty storage to non-zero value");
@@ -382,9 +382,11 @@ template <class T, size_t N> struct trivial {
382382
size_type storage_size_ = 0;
383383

384384
protected:
385-
constexpr const T *__data() const noexcept { return storage_data_.data(); }
386-
constexpr T *__data() noexcept { return storage_data_.data(); }
387-
constexpr size_type __size() const noexcept { return storage_size_; }
385+
constexpr const T *storage_data() const noexcept {
386+
return storage_data_.data();
387+
}
388+
constexpr T *storage_data() noexcept { return storage_data_.data(); }
389+
constexpr size_type storage_size() const noexcept { return storage_size_; }
388390
constexpr void unsafe_set_size(size_t new_size) noexcept {
389391
__IV_EXPECT(size_type(new_size) <= N && "new_size out-of-bounds [0, N]");
390392
storage_size_ = size_type(new_size);
@@ -401,11 +403,11 @@ template <class T, size_t N> struct trivial {
401403

402404
template <class T, size_t N> struct raw_byte_based_storage {
403405
alignas(T) std::byte _d[sizeof(T) * N];
404-
constexpr T *__data(size_t i) noexcept {
406+
constexpr T *storage_data(size_t i) noexcept {
405407
__IV_EXPECT(i < N);
406408
return reinterpret_cast<T *>(_d) + i;
407409
}
408-
constexpr const T *__data(size_t i) const noexcept {
410+
constexpr const T *storage_data(size_t i) const noexcept {
409411
__IV_EXPECT(i < N);
410412
return reinterpret_cast<const T *>(_d) + i;
411413
}
@@ -428,9 +430,11 @@ template <class T, size_t N> struct non_trivial {
428430
size_type storage_size_ = 0;
429431

430432
protected:
431-
constexpr const T *__data() const noexcept { return storage_data_.__data(0); }
432-
constexpr T *__data() noexcept { return storage_data_.__data(0); }
433-
constexpr size_type __size() const noexcept { return storage_size_; }
433+
constexpr const T *storage_data() const noexcept {
434+
return storage_data_.storage_data(0);
435+
}
436+
constexpr T *storage_data() noexcept { return storage_data_.storage_data(0); }
437+
constexpr size_type storage_size() const noexcept { return storage_size_; }
434438
constexpr void unsafe_set_size(size_t new_size) noexcept {
435439
__IV_EXPECT(size_type(new_size) <= N && "new_size out-of-bounds [0, N)");
436440
storage_size_ = size_type(new_size);
@@ -446,12 +450,14 @@ template <class T, size_t N> struct non_trivial {
446450
constexpr ~non_trivial()
447451
requires(std::is_trivially_destructible_v<T>)
448452
= default;
449-
constexpr ~non_trivial() { std::destroy(__data(), __data() + __size()); }
453+
constexpr ~non_trivial() {
454+
std::destroy(storage_data(), storage_data() + storage_size());
455+
}
450456
};
451457

452458
// Selects the vector storage.
453459
template <class T, size_t N>
454-
using _t = std::conditional_t<
460+
using storage_for = std::conditional_t<
455461
N == 0, zero_sized<T>,
456462
std::conditional_t<std::is_trivial_v<T>, trivial<T, N>, non_trivial<T, N>>>;
457463

@@ -461,14 +467,15 @@ namespace beman {
461467

462468
/// Dynamically-resizable fixed-N vector with inplace storage.
463469
template <class T, size_t N>
464-
struct inplace_vector : private details::inplace_vector::storage::_t<T, N> {
470+
struct inplace_vector
471+
: private details::inplace_vector::storage::storage_for<T, N> {
465472
private:
466473
static_assert(std::is_nothrow_destructible_v<T>,
467474
"T must be nothrow destructible");
468-
using __base_t = details::inplace_vector::storage::_t<T, N>;
469-
using __base_t::__data;
470-
using __base_t::__size;
471-
using __base_t::unsafe_set_size;
475+
using base_t = details::inplace_vector::storage::storage_for<T, N>;
476+
using base_t::storage_data;
477+
using base_t::storage_size;
478+
using base_t::unsafe_set_size;
472479

473480
public:
474481
using value_type = T;
@@ -515,8 +522,8 @@ struct inplace_vector : private details::inplace_vector::storage::_t<T, N> {
515522
// constexpr void assign(std::initializer_list<T> il);
516523

517524
// iterators
518-
constexpr iterator begin() noexcept { return __data(); }
519-
constexpr const_iterator begin() const noexcept { return __data(); }
525+
constexpr iterator begin() noexcept { return storage_data(); }
526+
constexpr const_iterator begin() const noexcept { return storage_data(); }
520527
constexpr iterator end() noexcept { return begin() + size(); }
521528
constexpr const_iterator end() const noexcept { return begin() + size(); }
522529
constexpr reverse_iterator rbegin() noexcept {
@@ -532,7 +539,7 @@ struct inplace_vector : private details::inplace_vector::storage::_t<T, N> {
532539
return const_reverse_iterator(begin());
533540
}
534541

535-
constexpr const_iterator cbegin() const noexcept { return __data(); }
542+
constexpr const_iterator cbegin() const noexcept { return storage_data(); }
536543
constexpr const_iterator cend() const noexcept { return cbegin() + size(); }
537544
constexpr const_reverse_iterator crbegin() const noexcept {
538545
return const_reverse_iterator(cend());
@@ -541,8 +548,10 @@ struct inplace_vector : private details::inplace_vector::storage::_t<T, N> {
541548
return const_reverse_iterator(cbegin());
542549
}
543550

544-
[[nodiscard]] constexpr bool empty() const noexcept { return __size() == 0; };
545-
constexpr size_type size() const noexcept { return __size(); }
551+
[[nodiscard]] constexpr bool empty() const noexcept {
552+
return storage_size() == 0;
553+
};
554+
constexpr size_type size() const noexcept { return storage_size(); }
546555
static constexpr size_type max_size() noexcept { return N; }
547556
static constexpr size_type capacity() noexcept { return N; }
548557
// constexpr void resize(size_type sz);
@@ -576,8 +585,8 @@ struct inplace_vector : private details::inplace_vector::storage::_t<T, N> {
576585
}
577586

578587
// [containers.sequences.inplace_vector.data], data access
579-
constexpr T *data() noexcept { return __data(); }
580-
constexpr const T *data() const noexcept { return __data(); }
588+
constexpr T *data() noexcept { return storage_data(); }
589+
constexpr const T *data() const noexcept { return storage_data(); }
581590

582591
// [containers.sequences.inplace_vector.modifiers], modifiers
583592
// template <class... Args>

tests/beman/inplace_vector/ref_impl.test.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -347,14 +347,14 @@ template <typename T, std::size_t N> void test_all() {
347347

348348
int main() {
349349
{ // storage
350-
using beman::details::inplace_vector::storage::_t;
351350
using beman::details::inplace_vector::storage::non_trivial;
351+
using beman::details::inplace_vector::storage::storage_for;
352352
using beman::details::inplace_vector::storage::trivial;
353353
using beman::details::inplace_vector::storage::zero_sized;
354354

355-
static_assert(std::is_same<_t<int, 0>, zero_sized<int>>{});
356-
static_assert(std::is_same<_t<int, 10>, trivial<int, 10>>{});
357-
static_assert(std::is_same<_t<std::unique_ptr<int>, 10>,
355+
static_assert(std::is_same<storage_for<int, 0>, zero_sized<int>>{});
356+
static_assert(std::is_same<storage_for<int, 10>, trivial<int, 10>>{});
357+
static_assert(std::is_same<storage_for<std::unique_ptr<int>, 10>,
358358
non_trivial<std::unique_ptr<int>, 10>>{},
359359
"");
360360
}

0 commit comments

Comments
 (0)