Insert one (key, payload) entry in O(log n).
Entries pushed earlier pop before equal-key entries pushed later.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(heap_t), | intent(inout) | :: | self | |||
| integer(kind=int64), | intent(in) | :: | key | |||
| integer(kind=int32), | intent(in) | :: | payload |
subroutine heap_push(self, key, payload) !! Insert one (key, payload) entry in O(log n). !! !! Entries pushed earlier pop before equal-key entries pushed later. class(heap_t), intent(inout) :: self integer(int64), intent(in) :: key integer(int32), intent(in) :: payload if (self%n_entries >= self%capacity()) then call self%reserve(max(DEFAULT_CAPACITY, GROWTH_FACTOR*self%capacity())) end if self%n_entries = self%n_entries + 1 self%n_pushed = self%n_pushed + 1_int64 self%keys(self%n_entries) = key self%payloads(self%n_entries) = payload self%insertion(self%n_entries) = self%n_pushed call sift_up(self, self%n_entries) end subroutine heap_push