Skip to content

Commit 3ba7896

Browse files
committed
slight refactoring
1 parent 446426c commit 3ba7896

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

include/beman/inplace_vector/inplace_vector.hpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,17 @@ using inplace_vector_internal_size_type =
5656
If<Capacity <= std::numeric_limits<uint32_t>::max(), uint32_t,
5757
uint64_t>>>;
5858

59+
template <typename T, std::size_t Capacity>
60+
using inplace_vector_array_type =
61+
If<!std::is_const_v<T>, std::array<T, Capacity>,
62+
const std::array<std::remove_const_t<T>, Capacity>>;
63+
5964
// array based storage is used so that we can satisfy constexpr requirement
6065
//
6166
// Selecting this storage type implies: std::is_trivial_v<T> or Capacity = 0
6267
template <typename T, std::size_t Capacity>
63-
struct inplace_vector_array_based_storage {
64-
using array_type = If<!std::is_const_v<T>, std::array<T, Capacity>,
65-
const std::array<std::remove_const_t<T>, Capacity>>;
66-
67-
array_type elems{};
68+
struct inplace_vector_type_based_storage {
69+
inplace_vector_array_type<T, Capacity> elems{};
6870

6971
constexpr T *begin() { return elems.data(); }
7072
constexpr const T *begin() const { return elems.data(); }
@@ -76,7 +78,7 @@ struct inplace_vector_array_based_storage {
7678
// Selecting this storage type implies: !std::is_trivial_v<T> and Capacity != 0
7779
template <typename T, std::size_t Capacity>
7880
struct inplace_vector_bytes_based_storage {
79-
alignas(T) std::byte elems[Capacity * sizeof(T)];
81+
alignas(T) inplace_vector_array_type<std::byte, Capacity * sizeof(T)> elems;
8082

8183
T *begin() { return std::launder(reinterpret_cast<const T *>(elems)); }
8284
const T *begin() const {
@@ -91,7 +93,7 @@ struct inplace_vector_destruct_base {
9193
using internal_size_type = inplace_vector_internal_size_type<Capacity>;
9294
using internal_storage_type =
9395
std::conditional_t<std::is_trivial_v<T> or Capacity == 0,
94-
inplace_vector_array_based_storage<T, Capacity>,
96+
inplace_vector_type_based_storage<T, Capacity>,
9597
inplace_vector_bytes_based_storage<T, Capacity>>;
9698

9799
internal_storage_type elems;

0 commit comments

Comments
 (0)