Iros
 
Loading...
Searching...
No Matches
vector_emplace_back.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/meta/util.h"
10#include "di/util/forward.h"
13
14namespace di::container::vector {
15template<concepts::detail::MutableVector Vec, typename... Args>
16requires(concepts::ConstructibleFrom<meta::detail::VectorValue<Vec>, Args...>)
17constexpr auto emplace_back(Vec& vector, Args&&... args) -> decltype(auto) {
18 auto size = vector::size(vector);
19 return invoke_as_fallible([&] {
20 return vector::reserve(vector, vector.grow_capacity(size + 1));
21 }) % [&] {
22 auto end = vector::data(vector) + size;
23 auto result = util::construct_at(end, util::forward<Args>(args)...);
24 vector.assume_size(size + 1);
25 return util::ref(*result);
27}
28}
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 reserve(Vec &vector, size_t capacity) -> R
Definition vector_reserve.h:16
constexpr auto data(concepts::detail::ConstantVector auto &vector)
Definition vector_data.h:6
constexpr auto ref
Definition reference_wrapper.h:98
constexpr auto construct_at
Definition construct_at.h:27
constexpr auto invoke_as_fallible
Definition invoke_as_fallible.h:37
constexpr auto try_infallible
Definition try_infallible.h:31