class IO::Event::PriorityHeap

def bubble_down(index)

def bubble_down(index)
	swap_value = 0
	swap_index = nil
	
	while true
		left_index = (2 * index) + 1
		left_value = @contents[left_index]
		
		if left_value.nil?
			# This node has no children so it can't bubble down any further. We're done here!
			return
		end
		
		# Determine which of the child nodes has the smallest value:
		right_index = left_index + 1
		right_value = @contents[right_index]
		
		if right_value.nil? or right_value > left_value
			swap_value = left_value
			swap_index = left_index
		else
			swap_value = right_value
			swap_index = right_index
		end
		
		if @contents[index] < swap_value
			# No need to swap, the minheap invariant is already satisfied:
			return
		else
			# At least one of the child node has a smaller value than the current node, swap current node with that child and update current node for if it might need to bubble down even further:
			# swap(index, swap_index)
			@contents[index], @contents[swap_index] = @contents[swap_index], @contents[index]
			
			index = swap_index
		end
	end
end