24template<
typename T, concepts::Allocator Alloc>
36 , m_allocator(
util::
move(other.m_allocator)) {}
38 constexpr Vector(std::initializer_list<T> init)
52 this->m_allocator = util::move(other.m_allocator);
66 auto [
data, new_capacity] = result;
68 m_capacity = new_capacity;
74 constexpr auto smallest_allowed_capacity = 32zu;
75 if (m_capacity >= min_capacity) {
78 return di::max({ min_capacity, 2 * m_capacity, smallest_allowed_capacity });
81 constexpr auto allocator() -> Alloc& {
return m_allocator; }
82 constexpr auto allocator() const -> Alloc const& {
return m_allocator; }
92 T* m_data {
nullptr };
94 usize m_capacity { 0 };
95 [[no_unique_address]] Alloc m_allocator {};
98template<concepts::InputContainer Con,
typename T = meta::ContainerValue<Con>>
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition mutable_vector_interface.h:30
constexpr void clear()
Definition mutable_vector_interface.h:57
constexpr auto append_container(Con &&container)
Definition mutable_vector_interface.h:79
Definition vector_forward_declaration.h:8
constexpr auto grow_capacity(usize min_capacity) const -> usize
Definition vector.h:73
constexpr auto capacity() const -> usize
Definition vector.h:59
constexpr auto operator=(Vector &&other) -> Vector &
Definition vector.h:47
constexpr auto allocator() const -> Alloc const &
Definition vector.h:82
constexpr Vector(Vector &&other)
Definition vector.h:32
constexpr Vector(std::initializer_list< T > init)
Definition vector.h:38
constexpr void assume_size(usize size)
Definition vector.h:71
constexpr auto span() const -> Span< ConstValue >
Definition vector.h:57
constexpr ~Vector()
Definition vector.h:44
constexpr Vector(Vector const &)=delete
T Value
Definition vector.h:27
constexpr auto allocator() -> Alloc &
Definition vector.h:81
T const ConstValue
Definition vector.h:28
constexpr auto operator=(Vector const &) -> Vector &=delete
constexpr Vector()=default
constexpr auto max_size() const -> usize
Definition vector.h:60
constexpr auto span() -> Span< Value >
Definition vector.h:56
constexpr auto reserve_from_nothing(usize n) -> meta::AllocatorResult< Alloc >
Definition vector.h:62
Definition span_forward_declaration.h:10
Definition allocator.h:20
constexpr auto deallocate
Definition deallocate.h:23
constexpr auto move
Definition move.h:38
constexpr auto size
Definition size.h:54
constexpr auto data
Definition data.h:51
size_t usize
Definition integers.h:33
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto exchange(T &object, U &&new_value) -> T
Definition exchange.h:8
Definition zstring_parser.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto exchange(T &object, U &&new_value) -> T
Definition exchange.h:8
constexpr auto as_fallible
Definition as_fallible.h:26
constexpr auto try_infallible
Definition try_infallible.h:31
constexpr auto deallocate_many
Definition deallocate_many.h:28
constexpr auto allocate_many
Definition allocate_many.h:48
constexpr auto max
Definition max.h:47
Definition allocation_result.h:7
Definition in_place_template.h:5