di 0.1.0
Loading...
Searching...
No Matches
drop.h
Go to the documentation of this file.
1#pragma once
2
9
10namespace di::container::view {
11namespace detail {
12 struct DropFunction {
13 template<concepts::ViewableContainer Con, concepts::ConvertibleTo<meta::ContainerSSizeType<Con>> Diff>
14 constexpr auto operator()(Con&& container, Diff&& difference) const -> concepts::View auto {
15 if constexpr (concepts::TagInvocable<DropFunction, Con, Diff>) {
16 return function::tag_invoke(*this, util::forward<Con>(container), util::forward<Diff>(difference));
17 } else if constexpr (concepts::SizedContainer<Con> && concepts::RandomAccessContainer<Con> &&
18 concepts::BorrowedContainer<Con> &&
19 concepts::ContainerIteratorReconstructibleContainer<Con, meta::RemoveCVRef<Con>,
23 in_place_type<meta::RemoveCVRef<Con>>, util::forward<Con>(container),
24 container::begin(container) +
26 static_cast<meta::ContainerSSizeType<Con>>(difference)),
27 container::end(container));
28 } else {
29 return DropView { util::forward<Con>(container),
30 static_cast<meta::ContainerSSizeType<Con>>(difference) };
31 }
32 }
33 };
34}
35
36constexpr inline auto drop = function::curry_back(detail::DropFunction {}, meta::c_<2ZU>);
37}
38
39namespace di {
40using view::drop;
41}
Definition adjacent.h:8
constexpr auto drop
Definition drop.h:36
constexpr auto min
Definition min.h:49
constexpr auto ssize
Definition ssize.h:34
DropView(Con &&, meta::ContainerSSizeType< Con >) -> DropView< meta::AsView< Con > >
constexpr auto reconstruct
Definition reconstruct.h:75
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto curry_back
Definition curry_back.h:141
IteratorSSizeType< ContainerIterator< T > > ContainerSSizeType
Definition container_ssize_type.h:8
RemoveCV< RemoveReference< T > > RemoveCVRef
Definition core.h:74
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252
decltype(container::begin(util::declval< T & >())) ContainerIterator
Definition container_iterator.h:8
Definition any_storable.h:9
constexpr auto in_place_type
Definition in_place_type.h:12