Files
go-gtfs/cmd/planner/prio-queue.go
2025-11-15 18:05:31 +01:00

35 lines
613 B
Go

package main
type pqItem struct {
node *searchNode
priority float64
index int
}
type priorityQueue []*pqItem
func (pq priorityQueue) Len() int { return len(pq) }
func (pq priorityQueue) Less(i, j int) bool { return pq[i].priority < pq[j].priority }
func (pq priorityQueue) Swap(i, j int) {
pq[i], pq[j] = pq[j], pq[i]
pq[i].index = i
pq[j].index = j
}
func (pq *priorityQueue) Push(x any) {
item := x.(*pqItem)
item.index = len(*pq)
*pq = append(*pq, item)
}
func (pq *priorityQueue) Pop() any {
old := *pq
n := len(old)
item := old[n-1]
item.index = -1
*pq = old[:n-1]
return item
}