di 0.1.0
Loading...
Searching...
No Matches
make_heap.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace di::container {
6namespace detail {
7 struct MakeHeapFunction {
8 template<concepts::RandomAccessIterator It, concepts::SentinelFor<It> Sent, typename Comp = function::Compare,
9 typename Proj = function::Identity>
10 requires(concepts::Sortable<It, Comp, Proj>)
11 constexpr auto operator()(It first, Sent last, Comp comp = {}, Proj proj = {}) const -> It {
12 auto dist = container::distance(first, last);
13 return impl(util::move(first), util::ref(comp), util::ref(proj), dist);
14 }
15
16 template<concepts::RandomAccessContainer Con, typename Comp = function::Compare,
17 typename Proj = function::Identity>
18 requires(concepts::Sortable<meta::ContainerIterator<Con>, Comp, Proj>)
19 constexpr auto operator()(Con&& container, Comp comp = {}, Proj proj = {}) const
21 return impl(container::begin(container), util::ref(comp), util::ref(proj), container::distance(container));
22 }
23
24 private:
25 constexpr static auto impl(auto first, auto comp, auto proj, auto size) {
26 for (auto index = size - 1; index >= 0; --index) {
27 PopHeapFunction::bubble_down(first, util::ref(comp), util::ref(proj), size, index);
28 }
29 return first + size;
30 }
31 };
32}
33
34constexpr inline auto make_heap = detail::MakeHeapFunction {};
35}
36
37namespace di {
39}
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 distance
Definition distance.h:44
constexpr auto size
Definition size.h:62
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