Iros
 
Loading...
Searching...
No Matches
static_vector.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/types/prelude.h"
12
13namespace di::container {
15
16template<typename T, typename SizeConstant>
17class StaticVector : public MutableVectorInterface<StaticVector<T, SizeConstant>, T> {
18private:
19 constexpr static size_t inline_capacity = SizeConstant {};
20
22
23public:
24 using Value = T;
25 using ConstValue = T const;
26
27 constexpr StaticVector() {
28 for (auto& x : m_data) {
29 x = T();
30 }
31 }
32
33 StaticVector(StaticVector const&) = default;
35
36 auto operator=(StaticVector const&) -> StaticVector& = default;
37 auto operator=(StaticVector&&) -> StaticVector& = default;
38
39 constexpr auto span() -> Span<T> { return { m_data, m_size }; }
40 constexpr auto span() const -> Span<T const> { return { m_data, m_size }; }
41
42 constexpr auto capacity() const -> size_t { return inline_capacity; }
43 constexpr auto max_size() const -> size_t { return inline_capacity; }
44
46 DI_ASSERT(this->size() == 0U);
47 if (n > inline_capacity) {
48 return Unexpected(NoCapacityError {});
49 }
50 return {};
51 }
52 constexpr void assume_size(size_t size) { m_size = static_cast<SizeType>(size); }
53
54 constexpr auto grow_capacity(usize min_capacity) const -> usize { return min_capacity; }
55
56private:
57 T m_data[inline_capacity];
58 SizeType m_size { 0 };
59};
60}
61
62namespace di {
64}
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition mutable_vector_interface.h:30
Definition static_vector.h:17
constexpr StaticVector()
Definition static_vector.h:27
constexpr auto span() -> Span< T >
Definition static_vector.h:39
StaticVector(StaticVector const &)=default
T const ConstValue
Definition static_vector.h:25
auto operator=(StaticVector const &) -> StaticVector &=default
constexpr auto span() const -> Span< T const >
Definition static_vector.h:40
constexpr auto reserve_from_nothing(size_t n) -> Expected< void, NoCapacityError >
Definition static_vector.h:45
StaticVector(StaticVector &&)=default
constexpr void assume_size(size_t size)
Definition static_vector.h:52
constexpr auto capacity() const -> size_t
Definition static_vector.h:42
constexpr auto max_size() const -> size_t
Definition static_vector.h:43
auto operator=(StaticVector &&) -> StaticVector &=default
T Value
Definition static_vector.h:24
constexpr auto grow_capacity(usize min_capacity) const -> usize
Definition static_vector.h:54
Definition expected_forward_declaration.h:8
Definition span_forward_declaration.h:10
Definition unexpected.h:14
Definition sequence.h:12
constexpr auto size
Definition size.h:54
decltype(detail::smallest_unsigned_type_helper(c_< size >)) SmallestUnsignedType
Definition smallest_unsigned_type.h:27
size_t usize
Definition integers.h:33
Definition zstring_parser.h:9
Definition static_vector.h:14