Home Manual Reference Source

src/heappop.js

import {IndexError} from '@failure-abstraction/error';
import {siftdown} from './core/index.js';

export default function heappop(heap) {
	const x = heap.data;
	const n = x.length;

	if (n === 0) throw new IndexError('heappop');

	const last = n - 1;

	// Swap last leaf and root

	const tmp = x[0];
	x[0] = x[last];
	x[last] = tmp;

	// Sift down the new root

	siftdown(heap.compare, x, 0, last, 0);

	// Return old root

	return x.pop();
}