Iros
 
Loading...
Searching...
No Matches
make_heap.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace di::container {
6namespace detail {
8 template<concepts::RandomAccessIterator It, concepts::SentinelFor<It> Sent, typename Comp = function::Compare,
9 typename Proj = function::Identity>
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>
19 constexpr auto operator()(Con&& container, Comp comp = {}, Proj proj = {}) const
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}
Definition random_access_container.h:8
Definition sortable.h:11
constexpr usize size
Definition gfx_test.cpp:24
Definition sequence.h:13
Definition sequence.h:12
constexpr auto make_heap
Definition make_heap.h:34
constexpr auto distance
Definition distance.h:44
constexpr auto begin
Definition begin.h:44
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
constexpr auto ref
Definition reference_wrapper.h:98
Definition zstring_parser.h:9
constexpr auto size
Definition size.h:54
constexpr auto proj
Definition proj.h:59
Definition compare.h:8
Definition identity.h:7