Iros
Loading...
Searching...
No Matches
destroy.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/concepts/prelude.h
"
4
#include "
di/container/iterator/prelude.h
"
5
#include "
di/container/meta/prelude.h
"
6
#include "
di/meta/trivial.h
"
7
#include "
di/util/addressof.h
"
8
#include "
di/util/destroy_at.h
"
9
10
namespace
di::container
{
11
namespace
detail
{
12
struct
DestroyFunction
{
13
template
<concepts::UninitInputIterator It, concepts::UninitSentinelFor<It> Sent>
14
requires
(
concepts::Destructible<meta::IteratorValue<It>
>)
15
constexpr
auto
operator
()(It it, Sent sent)
const
-> It {
16
if
constexpr
(
concepts::TriviallyDestructible<meta::IteratorValue<It>
>) {
17
container::advance
(it, sent);
18
return
it;
19
}
else
{
20
for
(; it != sent; ++it) {
21
util::destroy_at
(util::addressof(*it));
22
}
23
return
it;
24
}
25
}
26
27
template
<concepts::UninitInputContainer Con>
28
requires
(
concepts::Destructible<meta::ContainerValue<Con>
>)
29
constexpr
auto
operator
()(Con&&
container
)
const
->
meta::BorrowedIterator<Con>
{
30
return
(*
this
)(
container::begin
(
container
),
container::end
(
container
));
31
}
32
};
33
}
34
35
constexpr
inline
auto
destroy
=
detail::DestroyFunction
{};
36
}
37
38
namespace
di
{
39
using
container::destroy
;
40
}
addressof.h
di::concepts::Destructible
Definition
operations.h:57
di::concepts::TriviallyDestructible
Definition
trivial.h:42
destroy_at.h
prelude.h
prelude.h
prelude.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::destroy
constexpr auto destroy
Definition
destroy.h:35
di::container::end
constexpr auto end
Definition
end.h:47
di::container::advance
constexpr auto advance
Definition
advance.h:62
di::container::begin
constexpr auto begin
Definition
begin.h:44
di::meta::BorrowedIterator
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition
borrowed_iterator.h:11
di::util::destroy_at
constexpr auto destroy_at
Definition
destroy_at.h:24
di
Definition
zstring_parser.h:9
di::container::detail::DestroyFunction
Definition
destroy.h:12
trivial.h
libs
di
include
di
container
algorithm
destroy.h
Generated by
1.13.0