tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
uninitialized_array.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_ARRAY_UNINITIALIZED_ARRAY_HPP
4#define TETL_ARRAY_UNINITIALIZED_ARRAY_HPP
5
6#include <etl/_config/all.hpp>
7
14
15namespace etl {
16
17namespace detail {
18template <typename T>
20}
21
24template <typename T, etl::size_t Size>
26 using value_type = T;
27
28 constexpr uninitialized_array() = default;
29
30 [[nodiscard]] constexpr auto data() const noexcept -> T const* { return reinterpret_cast<T const*>(_storage); }
31
32 [[nodiscard]] constexpr auto data() noexcept -> T* { return reinterpret_cast<T*>(_storage); }
33
34 [[nodiscard]] static constexpr auto size() noexcept -> etl::size_t { return Size; }
35
36private:
37 alignas(T) TETL_NO_UNIQUE_ADDRESS etl::c_array<char, sizeof(T) * Size> _storage;
38};
39
40template <etl::detail::sufficiently_trivial T, etl::size_t Size>
41 requires(Size != 0)
43 using value_type = T;
44
45 constexpr uninitialized_array() = default;
46
47 [[nodiscard]] constexpr auto data() const noexcept -> T const* { return static_cast<T const*>(_storage); }
48
49 [[nodiscard]] constexpr auto data() noexcept -> T* { return static_cast<T*>(_storage); }
50
51 [[nodiscard]] static constexpr auto size() noexcept -> etl::size_t { return Size; }
52
53private:
55};
56
57template <typename T, etl::size_t Size>
58 requires(Size == 0)
59struct uninitialized_array<T, Size> {
60 using value_type = T;
61
62 constexpr uninitialized_array() = default;
63
64 [[nodiscard]] constexpr auto data() const noexcept -> T const* { return nullptr; }
65
66 [[nodiscard]] constexpr auto data() noexcept -> T* { return nullptr; }
67
68 [[nodiscard]] static constexpr auto size() noexcept -> etl::size_t { return 0; }
69};
70
71} // namespace etl
72
73#endif // TETL_ARRAY_UNINITIALIZED_ARRAY_HPP
#define TETL_NO_UNIQUE_ADDRESS
Definition attributes.hpp:41
ValueType[Size] c_array
Definition c_array.hpp:12
Definition adjacent_find.hpp:8
constexpr bool is_trivially_destructible_v
Definition is_trivially_destructible.hpp:33
constexpr bool is_trivially_default_constructible_v
Definition is_trivially_default_constructible.hpp:26
constexpr uninitialized_array()=default
constexpr auto data() const noexcept -> T const *
Definition uninitialized_array.hpp:47
constexpr auto data() noexcept -> T *
Definition uninitialized_array.hpp:49
static constexpr auto size() noexcept -> etl::size_t
Definition uninitialized_array.hpp:51
T value_type
Definition uninitialized_array.hpp:43
constexpr uninitialized_array()=default
constexpr auto data() const noexcept -> T const *
Definition uninitialized_array.hpp:30
constexpr auto data() noexcept -> T *
Definition uninitialized_array.hpp:32
static constexpr auto size() noexcept -> etl::size_t
Definition uninitialized_array.hpp:34
T value_type
Definition uninitialized_array.hpp:26