3#ifndef TETL_INPLACE_VECTOR_INPLACE_VECTOR_HPP
4#define TETL_INPLACE_VECTOR_INPLACE_VECTOR_HPP
36template <
typename T, etl::
size_t Capacity>
78 [[nodiscard]]
constexpr auto begin() const noexcept -> T const* {
return data(); }
80 [[nodiscard]]
constexpr auto begin() noexcept -> T* {
return data(); }
82 [[nodiscard]]
constexpr auto end() const noexcept -> T const*
87 [[nodiscard]]
constexpr auto end() noexcept -> T*
92 [[nodiscard]]
constexpr auto data() const noexcept -> T const* {
return _storage.data(); }
94 [[nodiscard]]
constexpr auto data() noexcept -> T* {
return _storage.data(); }
96 [[nodiscard]]
constexpr auto empty() const noexcept ->
bool {
return size() == 0; }
98 [[nodiscard]]
constexpr auto size() const noexcept ->
etl::
size_t {
return static_cast<etl::size_t>(_size); }
100 [[nodiscard]]
static constexpr auto capacity() noexcept ->
etl::
size_t {
return Capacity; }
102 [[nodiscard]]
static constexpr auto max_size() noexcept ->
etl::
size_t {
return Capacity; }
140 template <
typename... Args>
167 template <
typename... Args>
172 unsafe_set_size(
size() + 1U);
180 unsafe_set_size(
size() + 1U);
188 unsafe_set_size(
size() + 1U);
196 unsafe_set_size(
size() - 1U);
199 constexpr auto clear() noexcept ->
void
206 constexpr auto unsafe_set_size(size_type newSize)
noexcept ->
void
209 _size =
static_cast<internal_size_t
>(newSize);
233 [[nodiscard]]
constexpr auto begin() const noexcept -> T const* {
return data(); }
235 [[nodiscard]]
constexpr auto begin() noexcept -> T* {
return data(); }
237 [[nodiscard]]
constexpr auto end() const noexcept -> T const* {
return nullptr; }
239 [[nodiscard]]
constexpr auto end() noexcept -> T* {
return nullptr; }
241 [[nodiscard]]
constexpr auto data() const noexcept -> T const* {
return nullptr; }
243 [[nodiscard]]
constexpr auto data() noexcept -> T* {
return nullptr; }
245 [[nodiscard]]
constexpr auto empty() const noexcept ->
bool {
return size() == 0; }
247 [[nodiscard]]
constexpr auto size() const noexcept ->
etl::
size_t {
return 0; }
249 [[nodiscard]]
static constexpr auto capacity() noexcept ->
etl::
size_t {
return 0; }
251 [[nodiscard]]
static constexpr auto max_size() noexcept ->
etl::
size_t {
return 0; }
269 template <
typename... Args>
279 template <
typename... Args>
287 constexpr auto clear() noexcept ->
void { }
#define TETL_TRIVIAL_ABI
Definition attributes.hpp:47
#define TETL_NO_UNIQUE_ADDRESS
Definition attributes.hpp:41
#define TETL_PRECONDITION(...)
Definition check.hpp:16
constexpr auto move(InputIt first, InputIt last, OutputIt destination) -> OutputIt
Moves the elements in the range [first, last), to another range beginning at destination,...
Definition move.hpp:26
constexpr auto prev(BidirIt it, typename iterator_traits< BidirIt >::difference_type n=1) -> BidirIt
Return the nth predecessor of iterator it.
Definition prev.hpp:14
constexpr auto next(InputIt it, typename iterator_traits< InputIt >::difference_type n=1) -> InputIt
Return the nth successor of iterator it.
Definition next.hpp:14
conditional_t<(N< static_cast< unsigned char >(-1)), unsigned char, conditional_t<(N< static_cast< unsigned short >(-1)), unsigned short, conditional_t<(N< static_cast< unsigned int >(-1)), unsigned int, conditional_t<(N< static_cast< unsigned long >(-1)), unsigned long, unsigned long long > > > > smallest_size_t
Smallest unsigned integer type that can represent values in the range [0, N].
Definition smallest_size_t.hpp:13
constexpr struct etl::ranges::construct_at_fn construct_at
constexpr struct etl::ranges::destroy_at_fn destroy_at
constexpr struct etl::ranges::destroy_fn destroy
Definition adjacent_find.hpp:8
constexpr bool is_nothrow_copy_constructible_v
Definition is_nothrow_copy_constructible.hpp:27
constexpr auto addressof(T &arg) noexcept -> T *
Obtains the actual address of the object or function arg, even in presence of overloaded operator&.
Definition addressof.hpp:15
constexpr bool is_nothrow_move_constructible_v
Definition is_nothrow_move_constructible.hpp:20
constexpr auto uninitialized_copy(InputIt first, InputIt last, NoThrowForwardIt dest) -> NoThrowForwardIt
Definition uninitialized_copy.hpp:13
constexpr bool is_trivially_destructible_v
Definition is_trivially_destructible.hpp:33
constexpr auto exchange(T &obj, U &&newValue) noexcept(etl::is_nothrow_move_constructible_v< T > and etl::is_nothrow_assignable_v< T &, U >) -> T
Replaces the value of obj with new_value and returns the old value of obj.
Definition exchange.hpp:16
constexpr bool is_trivially_copy_constructible_v
Definition is_trivially_copy_constructible.hpp:27
constexpr auto is_trivially_move_constructible_v
Definition is_trivially_move_constructible.hpp:20
TETL_BUILTIN_PTRDIFF ptrdiff_t
etl::ptrdiff_t is the signed integer type of the result of subtracting two pointers.
Definition ptrdiff_t.hpp:14
auto unreachable() -> void
Definition unreachable.hpp:10
constexpr auto forward(remove_reference_t< T > ¶m) noexcept -> T &&
Forwards lvalues as either lvalues or as rvalues, depending on T. When t is a forwarding reference (a...
Definition forward.hpp:18
TETL_BUILTIN_SIZET size_t
etl::size_t is the unsigned integer type of the result of the sizeof operator.
Definition size_t.hpp:14
constexpr auto uninitialized_move(InputIt first, InputIt last, NoThrowForwardIt dest) -> NoThrowForwardIt
Definition uninitialized_move.hpp:14
constexpr auto try_push_back(T &&) -> T *
Definition inplace_vector.hpp:267
constexpr auto data() const noexcept -> T const *
Definition inplace_vector.hpp:241
constexpr auto unchecked_push_back(T &&) -> T &
Definition inplace_vector.hpp:277
constexpr auto try_emplace_back(Args &&...) -> T *
Definition inplace_vector.hpp:270
constexpr auto back() const -> const_reference
Definition inplace_vector.hpp:259
etl::ptrdiff_t difference_type
Definition inplace_vector.hpp:221
constexpr auto unchecked_push_back(T const &) -> T &
Definition inplace_vector.hpp:275
constexpr auto pop_back() -> void
Definition inplace_vector.hpp:285
etl::size_t size_type
Definition inplace_vector.hpp:220
constexpr auto operator[](size_type) -> reference
Definition inplace_vector.hpp:261
constexpr auto unchecked_emplace_back(Args &&...) -> T &
Definition inplace_vector.hpp:280
constexpr auto front() -> reference
Definition inplace_vector.hpp:253
etl::reverse_iterator< const_iterator > const_reverse_iterator
Definition inplace_vector.hpp:229
static constexpr auto capacity() noexcept -> etl::size_t
Definition inplace_vector.hpp:249
value_type const & const_reference
Definition inplace_vector.hpp:223
T * iterator
Definition inplace_vector.hpp:226
constexpr inplace_vector()=default
T const * const_iterator
Definition inplace_vector.hpp:227
value_type & reference
Definition inplace_vector.hpp:222
constexpr auto begin() noexcept -> T *
Definition inplace_vector.hpp:235
constexpr auto data() noexcept -> T *
Definition inplace_vector.hpp:243
constexpr auto begin() const noexcept -> T const *
Definition inplace_vector.hpp:233
constexpr auto front() const -> const_reference
Definition inplace_vector.hpp:255
constexpr auto empty() const noexcept -> bool
Definition inplace_vector.hpp:245
constexpr auto clear() noexcept -> void
Definition inplace_vector.hpp:287
constexpr auto try_push_back(T const &) -> T *
Definition inplace_vector.hpp:265
etl::reverse_iterator< iterator > reverse_iterator
Definition inplace_vector.hpp:228
constexpr auto end() const noexcept -> T const *
Definition inplace_vector.hpp:237
T * pointer
Definition inplace_vector.hpp:224
constexpr auto back() -> reference
Definition inplace_vector.hpp:257
T const * const_pointer
Definition inplace_vector.hpp:225
static constexpr auto max_size() noexcept -> etl::size_t
Definition inplace_vector.hpp:251
constexpr auto size() const noexcept -> etl::size_t
Definition inplace_vector.hpp:247
constexpr auto end() noexcept -> T *
Definition inplace_vector.hpp:239
constexpr auto operator[](size_type) const -> const_reference
Definition inplace_vector.hpp:263
T value_type
Definition inplace_vector.hpp:219
constexpr auto data() const noexcept -> T const *
Definition inplace_vector.hpp:92
constexpr auto back() const -> const_reference
Definition inplace_vector.hpp:122
constexpr inplace_vector(inplace_vector const &other) noexcept(etl::is_nothrow_copy_constructible_v< T >)
Definition inplace_vector.hpp:56
etl::ptrdiff_t difference_type
Definition inplace_vector.hpp:40
constexpr auto pop_back() -> void
Definition inplace_vector.hpp:192
etl::size_t size_type
Definition inplace_vector.hpp:39
constexpr auto front() -> reference
Definition inplace_vector.hpp:104
etl::reverse_iterator< const_iterator > const_reverse_iterator
Definition inplace_vector.hpp:48
constexpr auto unchecked_emplace_back(Args &&... args) -> T &
Definition inplace_vector.hpp:168
static constexpr auto capacity() noexcept -> etl::size_t
Definition inplace_vector.hpp:100
value_type const & const_reference
Definition inplace_vector.hpp:42
constexpr auto try_push_back(T &&val) -> T *
Definition inplace_vector.hpp:158
T * iterator
Definition inplace_vector.hpp:45
constexpr inplace_vector()=default
constexpr auto operator[](size_type n) -> reference
Definition inplace_vector.hpp:128
constexpr inplace_vector(inplace_vector &&other) noexcept(etl::is_nothrow_move_constructible_v< T >)
Definition inplace_vector.hpp:66
T const * const_iterator
Definition inplace_vector.hpp:46
inplace_vector(inplace_vector const &other)=default
constexpr auto unchecked_push_back(T const &val) -> T &
Definition inplace_vector.hpp:176
value_type & reference
Definition inplace_vector.hpp:41
constexpr auto begin() noexcept -> T *
Definition inplace_vector.hpp:80
constexpr auto data() noexcept -> T *
Definition inplace_vector.hpp:94
constexpr auto begin() const noexcept -> T const *
Definition inplace_vector.hpp:78
constexpr auto front() const -> const_reference
Definition inplace_vector.hpp:110
constexpr auto empty() const noexcept -> bool
Definition inplace_vector.hpp:96
inplace_vector(inplace_vector &&other)=default
constexpr auto clear() noexcept -> void
Definition inplace_vector.hpp:199
etl::reverse_iterator< iterator > reverse_iterator
Definition inplace_vector.hpp:47
constexpr auto unchecked_push_back(T &&val) -> T &
Definition inplace_vector.hpp:184
constexpr auto end() const noexcept -> T const *
Definition inplace_vector.hpp:82
T * pointer
Definition inplace_vector.hpp:43
~inplace_vector()=default
constexpr auto back() -> reference
Definition inplace_vector.hpp:116
constexpr auto try_emplace_back(Args &&... args) -> T *
Definition inplace_vector.hpp:141
constexpr auto try_push_back(T const &val) -> T *
Definition inplace_vector.hpp:149
T const * const_pointer
Definition inplace_vector.hpp:44
static constexpr auto max_size() noexcept -> etl::size_t
Definition inplace_vector.hpp:102
constexpr auto size() const noexcept -> etl::size_t
Definition inplace_vector.hpp:98
constexpr auto end() noexcept -> T *
Definition inplace_vector.hpp:87
constexpr auto operator[](size_type n) const -> const_reference
Definition inplace_vector.hpp:134
T value_type
Definition inplace_vector.hpp:38
reverse_iterator is an iterator adaptor that reverses the direction of a given iterator....
Definition reverse_iterator.hpp:22
Definition uninitialized_array.hpp:25