sift_up Subroutine

private pure subroutine sift_up(self, start)

Move entry start towards the root until the heap property holds.

Arguments

Type IntentOptional Attributes Name
class(heap_t), intent(inout) :: self
integer(kind=default_int), intent(in) :: start

Calls

proc~~sift_up~~CallsGraph proc~sift_up sift_up proc~precedes precedes proc~sift_up->proc~precedes proc~swap_entries swap_entries proc~sift_up->proc~swap_entries

Called by

proc~~sift_up~~CalledByGraph proc~sift_up sift_up proc~heap_push heap_t%heap_push proc~heap_push->proc~sift_up proc~a_star a_star proc~a_star->proc~heap_push proc~dijkstra dijkstra proc~dijkstra->proc~heap_push

Variables

Type Visibility Attributes Name Initial
integer(kind=default_int), private :: child
integer(kind=default_int), private :: parent

Source Code

   pure subroutine sift_up(self, start)
      !! Move entry `start` towards the root until the heap property holds.
      class(heap_t), intent(inout) :: self
      integer(default_int), intent(in) :: start

      integer(default_int) :: child, parent

      child = start
      do while (child > 1)
         parent = child/2
         if (.not. precedes(self, child, parent)) exit
         call swap_entries(self, child, parent)
         child = parent
      end do
   end subroutine sift_up