Iros
 
Loading...
Searching...
No Matches
vector_append_container.h
Go to the documentation of this file.
1#pragma once
2
11#include "di/meta/vocab.h"
12#include "di/types/prelude.h"
13#include "di/util/move.h"
16
18template<concepts::detail::MutableVector Vec, concepts::InputContainer Con, typename T = meta::detail::VectorValue<Vec>,
19 typename R = meta::detail::VectorAllocResult<Vec>>
21constexpr auto append_container(Vec& vector, Con&& container) -> R {
22 return container::sequence(util::forward<Con>(container), [&]<typename X>(X&& value) {
23 return as_fallible(vector::emplace_back(vector, util::forward<X>(value)));
24 });
25}
26
27template<concepts::detail::MutableVector Vec, concepts::InputContainer Con, typename T = meta::detail::VectorValue<Vec>,
28 typename It = meta::detail::VectorIterator<Vec>, typename Cit = meta::detail::VectorConstIterator<Vec>,
29 typename R = meta::LikeExpected<meta::detail::VectorAllocResult<Vec>, View<It, It>>>
31constexpr auto insert_container(Vec& vector, Cit it, Con&& container) -> R {
32 auto start_offset = it - vector::begin(vector);
33 return invoke_as_fallible([&] {
34 return container::sequence(util::forward<Con>(container), [&]<typename X>(X&& value) {
35 return as_fallible(vector::emplace(vector, it++, util::forward<X>(value)));
36 });
37 }) % [&] {
38 auto end_offset = it - vector::begin(vector);
39 return View {
40 vector::begin(vector) + start_offset,
41 vector::begin(vector) + end_offset,
42 };
44}
45}
Definition view.h:35
Definition container_compatible.h:9
Definition vector_append_container.h:17
constexpr auto append_container(Vec &vector, Con &&container) -> R
Definition vector_append_container.h:21
constexpr auto emplace_back(Vec &vector, Args &&... args) -> decltype(auto)
Definition vector_emplace_back.h:17
constexpr auto emplace(Vec &vector, CIter cposition, Args &&... args) -> G
Definition vector_emplace.h:24
constexpr auto insert_container(Vec &vector, Cit it, Con &&container) -> R
Definition vector_append_container.h:31
constexpr auto begin(concepts::detail::ConstantVector auto &vector)
Definition vector_begin.h:7
Definition sequence.h:12
constexpr auto sequence
Definition sequence.h:34
constexpr auto invoke_as_fallible
Definition invoke_as_fallible.h:37
constexpr auto as_fallible
Definition as_fallible.h:26
constexpr auto try_infallible
Definition try_infallible.h:31