di 0.1.0
Loading...
Searching...
No Matches
sort.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace di::container {
7namespace detail {
8 struct SortFunction {
9 template<concepts::RandomAccessIterator It, concepts::SentinelFor<It> Sent, typename Comp = function::Compare,
10 typename Proj = function::Identity>
11 requires(concepts::Sortable<It, Comp, Proj>)
12 constexpr auto operator()(It first, Sent last, Comp comp = {}, Proj proj = {}) const -> It {
13 // FIXME: consider using quick sort instead of heap sort.
14 container::make_heap(first, last, util::ref(comp), util::ref(proj));
15 return container::sort_heap(first, last, util::ref(comp), util::ref(proj));
16 }
17
18 template<concepts::RandomAccessContainer Con, typename Comp = function::Compare,
19 typename Proj = function::Identity>
20 requires(concepts::Sortable<meta::ContainerIterator<Con>, Comp, Proj>)
21 constexpr auto operator()(Con&& container, Comp comp = {}, Proj proj = {}) const
23 return (*this)(container::begin(container), container::end(container), util::ref(comp), util::ref(proj));
24 }
25 };
26}
27
28constexpr inline auto sort = detail::SortFunction {};
29}
30
31namespace di {
32using container::sort;
33}
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
Definition sequence.h:12
constexpr auto make_heap
Definition make_heap.h:34
constexpr auto sort
Definition sort.h:28
constexpr auto end
Definition end.h:55
constexpr auto sort_heap
Definition sort_heap.h:38
constexpr auto begin
Definition begin.h:52
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
constexpr auto ref
Definition reference_wrapper.h:98
Definition any_storable.h:9
constexpr auto proj
Definition proj.h:59