Iros
 
Loading...
Searching...
No Matches
uninitialized_relocate_backwards.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/meta/trivial.h"
8#include "di/util/addressof.h"
10#include "di/util/destroy_at.h"
11#include "di/util/relocate.h"
12
13namespace di::container {
14template<typename In, typename Out>
16
17namespace detail {
19 template<concepts::BidirectionalIterator In, concepts::SentinelFor<In> Sent,
20 concepts::UninitBidirectionalIterator Out, concepts::UninitSentinelFor<Out> OutSent>
23 constexpr auto operator()(In input, Sent in_sent, Out output, OutSent out_sent) const
25 auto in = container::next(input, in_sent);
26 auto out = container::next(output, out_sent);
27
28 // FIXME: add specical support for trivially relocatable types when not in constexpr context.
29 while (in != input && out != output) {
30 util::construct_at(util::addressof(*--out), util::relocate(*--in));
31 }
32 return { util::move(in), util::move(out) };
33 }
34
35 template<concepts::BidirectionalContainer Con, concepts::UninitBidirectionalContainer Out>
38 constexpr auto operator()(Con&& in, Out&& out) const
40 return (*this)(container::begin(in), container::end(in), container::begin(out), container::end(out));
41 }
42 };
43}
44
46}
47
48namespace di {
50}
Definition operations.h:11
Definition operations.h:57
Definition sequence.h:13
Definition sequence.h:12
constexpr auto next
Definition next.h:35
constexpr auto uninitialized_relocate_backwards
Definition uninitialized_relocate_backwards.h:45
container::InOutResult< In, Out > UninitializedRelocateBackwardsResult
Definition uninitialized_relocate_backwards.h:15
constexpr auto end
Definition end.h:47
constexpr auto begin
Definition begin.h:44
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
meta::Type< decltype(container::iterator_value(types::in_place_type< meta::RemoveCVRef< T > >))> IteratorValue
Definition iterator_value.h:8
IteratorValue< ContainerIterator< T > > ContainerValue
Definition container_value.h:8
constexpr auto relocate
Definition relocate.h:21
constexpr auto construct_at
Definition construct_at.h:27
Definition zstring_parser.h:9
Definition in_out_result.h:8
Definition uninitialized_relocate_backwards.h:18