mirror of
https://github.com/tw93/Mole.git
synced 2026-02-04 20:19:45 +00:00
40 lines
954 B
Go
40 lines
954 B
Go
package main
|
|
|
|
// entryHeap is a min-heap of dirEntry used to keep Top N largest entries.
|
|
type entryHeap []dirEntry
|
|
|
|
func (h entryHeap) Len() int { return len(h) }
|
|
func (h entryHeap) Less(i, j int) bool { return h[i].Size < h[j].Size }
|
|
func (h entryHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
|
|
|
|
func (h *entryHeap) Push(x any) {
|
|
*h = append(*h, x.(dirEntry))
|
|
}
|
|
|
|
func (h *entryHeap) Pop() any {
|
|
old := *h
|
|
n := len(old)
|
|
x := old[n-1]
|
|
*h = old[0 : n-1]
|
|
return x
|
|
}
|
|
|
|
// largeFileHeap is a min-heap for fileEntry.
|
|
type largeFileHeap []fileEntry
|
|
|
|
func (h largeFileHeap) Len() int { return len(h) }
|
|
func (h largeFileHeap) Less(i, j int) bool { return h[i].Size < h[j].Size }
|
|
func (h largeFileHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
|
|
|
|
func (h *largeFileHeap) Push(x any) {
|
|
*h = append(*h, x.(fileEntry))
|
|
}
|
|
|
|
func (h *largeFileHeap) Pop() any {
|
|
old := *h
|
|
n := len(old)
|
|
x := old[n-1]
|
|
*h = old[0 : n-1]
|
|
return x
|
|
}
|