#ifndef SPROUT_ALGORITHM_FIXED_PUSH_HEAP_HPP #define SPROUT_ALGORITHM_FIXED_PUSH_HEAP_HPP #include #include #include #include #include HDR_FUNCTIONAL_SSCRISK_CEL_OR_SPROUT_DETAIL namespace sprout { namespace fixed { namespace detail { template SPROUT_CONSTEXPR inline typename sprout::fixed_container_traits::fixed_container_type push_heap_impl( Container const& cont, Compare comp, typename sprout::fixed_container_traits::difference_type offset, typename sprout::fixed_container_traits::difference_type n ) { return n != 0 && comp(*(sprout::fixed_begin(cont) + offset + (n - 1) / 2), *(sprout::fixed_begin(cont) + offset + n)) ? sprout::fixed::detail::push_heap_impl( sprout::fixed::swap_element(cont, sprout::fixed_begin(cont) + offset + (n - 1) / 2, sprout::fixed_begin(cont) + offset + n), comp, offset, (n - 1) / 2 ) : sprout::get_fixed_copy(cont) ; } } // namespace detail // // push_heap // template SPROUT_CONSTEXPR inline typename sprout::fixed_container_traits::fixed_container_type push_heap( Container const& cont, Compare comp ) { return sprout::fixed::detail::push_heap_impl( cont, comp, sprout::fixed_begin_offset(cont), sprout::size(cont) - 1 ); } // // push_heap // template SPROUT_CONSTEXPR inline typename sprout::fixed_container_traits::fixed_container_type push_heap( Container const& cont ) { return sprout::fixed::detail::push_heap_impl( cont, NS_SSCRISK_CEL_OR_SPROUT_DETAIL::less::value_type>(), sprout::fixed_begin_offset(cont), sprout::size(cont) - 1 ); } } // namespace fixed } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_PUSH_HEAP_HPP