+
+func (h mergeHeap) Len() int {
+ return len(h)
+}
+
+func (h mergeHeap) Less(a, b int) bool {
+ return nodeEnd(h[a].level, h[a].index) < nodeEnd(h[b].level, h[b].index)
+}
+
+func (h mergeHeap) Swap(a, b int) {
+ h[a], h[b] = h[b], h[a]
+}
+
+func (h *mergeHeap) Push(value any) {
+ *h = append(*h, value.(nodeKey))
+}
+
+func (h *mergeHeap) Pop() any {
+ old := *h
+ key := old[len(old)-1]
+ *h = old[:len(old)-1]
+
+ return key
+}