Iros
 
Loading...
Searching...
No Matches
vector_resize.h
Go to the documentation of this file.
1#pragma once
2
10#include "di/meta/operations.h"
11#include "di/types/prelude.h"
12#include "di/util/create.h"
14
15namespace di::container::vector {
16template<concepts::detail::MutableVector Vec, typename T = meta::detail::VectorValue<Vec>,
17 typename R = meta::detail::VectorAllocResult<Vec>>
18requires(concepts::DefaultConstructible<T>)
19constexpr auto resize(Vec& vector, size_t count) -> R {
20 auto size = vector::size(vector);
21 if (count == size) {
22 return util::create<R>();
23 }
24
25 if (count < size) {
26 auto end = vector::end(vector);
28 vector.assume_size(count);
29 return util::create<R>();
30 }
31
32 return container::sequence(range(count - size), [&](auto) {
34 });
35}
36
37template<concepts::detail::MutableVector Vec, typename T = meta::detail::VectorValue<Vec>,
38 typename R = meta::detail::VectorAllocResult<Vec>>
40constexpr auto resize(Vec& vector, size_t count, T const& value) -> R {
41 auto size = vector::size(vector);
42 if (count < size) {
43 auto end = vector::end(vector);
45 vector.assume_size(count);
46 return util::create<R>();
47 }
48 if (count > size) {
49 return container::sequence(range(count - size), [&](auto) {
51 });
52 }
53 return util::create<R>();
54}
55}
Definition operations.h: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 emplace_back(Vec &vector, Args &&... args) -> decltype(auto)
Definition vector_emplace_back.h:17
constexpr auto resize(Vec &vector, size_t count) -> R
Definition vector_resize.h:19
constexpr auto sequence
Definition sequence.h:34
constexpr auto destroy
Definition destroy.h:35
constexpr auto count
Definition count.h:37
constexpr auto create(Args &&... args)
Definition create.h:21
constexpr auto as_fallible
Definition as_fallible.h:26