Iros
 
Loading...
Searching...
No Matches
push_heap.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace di::container {
9namespace detail {
11 template<concepts::RandomAccessIterator It, concepts::SentinelFor<It> Sent, typename Comp = function::Compare,
12 typename Proj = function::Identity>
14 constexpr auto operator()(It first, Sent last, Comp comp = {}, Proj proj = {}) const -> It {
15 return this->impl(util::move(first), util::ref(comp), util::ref(proj), container::distance(first, last));
16 }
17
18 template<concepts::RandomAccessContainer Con, typename Comp = function::Compare,
19 typename Proj = function::Identity>
21 constexpr auto operator()(Con&& container, Comp comp = {}, Proj proj = {}) const
24 }
25
26 private:
27 constexpr static auto impl(auto first, auto comp, auto proj, auto size) {
28 auto parent_index = [](auto index) {
29 return (index + 1) / 2 - 1;
30 };
31
32 auto index = size - 1;
33 for (auto parent = parent_index(index);
34 index && function::invoke(comp, function::invoke(proj, first[index]),
35 function::invoke(proj, first[parent])) > 0;
36 index = parent, parent = parent_index(index)) {
37 container::iterator_swap(first + index, first + parent);
38 }
39 return first + size;
40 }
41 };
42}
43
44constexpr inline auto push_heap = detail::PushHeapFunction {};
45}
46
47namespace di {
49}
Definition random_access_container.h:8
Definition sortable.h:11
constexpr usize size
Definition gfx_test.cpp:24
Definition sequence.h:13
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
Definition sequence.h:12
constexpr auto distance
Definition distance.h:44
constexpr auto push_heap
Definition push_heap.h:44
constexpr auto size
Definition size.h:54
constexpr auto iterator_swap
Definition iterator_swap.h:49
constexpr auto begin
Definition begin.h:44
constexpr auto invoke
Definition invoke.h:100
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