Iros
 
Loading...
Searching...
No Matches
vector_reserve.h
Go to the documentation of this file.
1#pragma once
2
9#include "di/types/prelude.h"
10#include "di/util/create.h"
11#include "di/util/swap.h"
13
14namespace di::container::vector {
15template<concepts::detail::MutableVector Vec, typename R = meta::detail::VectorAllocResult<Vec>>
16constexpr auto reserve(Vec& vector, size_t capacity) -> R {
17 if (capacity <= vector.capacity()) {
18 return util::create<R>();
19 }
20
21 auto size = vector::size(vector);
22 auto temp = Vec();
23 return invoke_as_fallible([&] {
24 return temp.reserve_from_nothing(capacity);
25 }) % [&] {
26 auto new_buffer = vector::data(temp);
28 new_buffer + capacity);
29 temp.assume_size(size);
30 vector.assume_size(0);
31 util::swap(vector, temp);
33}
34}
Definition vector_append_container.h:17
constexpr auto end(concepts::detail::ConstantVector auto &vector)
Definition vector_end.h:8
constexpr auto size(concepts::detail::ConstantVector auto const &vector) -> size_t
Definition vector_size.h:7
constexpr auto reserve(Vec &vector, size_t capacity) -> R
Definition vector_reserve.h:16
constexpr auto begin(concepts::detail::ConstantVector auto &vector)
Definition vector_begin.h:7
constexpr auto data(concepts::detail::ConstantVector auto &vector)
Definition vector_data.h:6
constexpr auto uninitialized_relocate
Definition uninitialized_relocate.h:41
constexpr struct di::util::SwapFunction swap
constexpr auto create(Args &&... args)
Definition create.h:21
constexpr auto invoke_as_fallible
Definition invoke_as_fallible.h:37
constexpr auto try_infallible
Definition try_infallible.h:31