// Generated by Lisette bindgen
// Source: container/heap (Go stdlib)
// Go: 1.25.5
// Lisette: 0.1.14

/// Fix re-establishes the heap ordering after the element at index i has changed its value.
/// Changing the value of the element at index i and then calling Fix is equivalent to,
/// but less expensive than, calling [Remove](h, i) followed by a Push of the new value.
/// The complexity is O(log n) where n = h.Len().
pub fn Fix(h: Interface, i: int)

/// Init establishes the heap invariants required by the other routines in this package.
/// Init is idempotent with respect to the heap invariants
/// and may be called whenever the heap invariants may have been invalidated.
/// The complexity is O(n) where n = h.Len().
pub fn Init(h: Interface)

/// Pop removes and returns the minimum element (according to Less) from the heap.
/// The complexity is O(log n) where n = h.Len().
/// Pop is equivalent to [Remove](h, 0).
pub fn Pop(h: Interface) -> Unknown

/// Push pushes the element x onto the heap.
/// The complexity is O(log n) where n = h.Len().
pub fn Push(h: Interface, x: Unknown)

/// Remove removes and returns the element at index i from the heap.
/// The complexity is O(log n) where n = h.Len().
pub fn Remove(h: Interface, i: int) -> Unknown

/// The Interface type describes the requirements
/// for a type using the routines in this package.
/// Any type that implements it may be used as a
/// min-heap with the following invariants (established after
/// [Init] has been called or if the data is empty or sorted):
/// 
/// 	!h.Less(j, i) for 0 <= i < h.Len() and 2*i+1 <= j <= 2*i+2 and j < h.Len()
/// 
/// Note that [Push] and [Pop] in this interface are for package heap's
/// implementation to call. To add and remove things from the heap,
/// use [heap.Push] and [heap.Pop].
pub interface Interface {
  fn Len() -> int
  fn Less(i: int, j: int) -> bool
  fn Pop() -> Unknown
  fn Push(x: Unknown)
  fn Swap(i: int, j: int)
}
