diff options
| author | 2026-03-29 14:15:30 +0000 | |
|---|---|---|
| committer | 2026-03-29 14:15:30 +0000 | |
| commit | e0e493fbf197aabf9272e52ab0e7282e308bcdeb (patch) | |
| tree | 183f4bc7db4489b5a276a3fbd614b3c3ac1b2276 | |
| parent | internal/priorityqueue: Actually just make our own priority queue (diff) | |
| signature | No signature | |
commitquery: Use our proper priority queue thingy
| -rw-r--r-- | commitquery/node_paint_down_to_common.go | 14 | ||||
| -rw-r--r-- | commitquery/priority_queue.go | 32 |
2 files changed, 9 insertions, 37 deletions
diff --git a/commitquery/node_paint_down_to_common.go b/commitquery/node_paint_down_to_common.go index a9618c2d..2fa24816 100644 --- a/commitquery/node_paint_down_to_common.go +++ b/commitquery/node_paint_down_to_common.go @@ -1,5 +1,7 @@ package commitquery +import "codeberg.org/lindenii/furgit/internal/priorityqueue" + func (query *query) paintDownToCommon(left nodeIndex, rights []nodeIndex, minGeneration uint64) error { query.beginMarkPhase() @@ -11,18 +13,20 @@ func (query *query) paintDownToCommon(left nodeIndex, rights []nodeIndex, minGen return nil } - queue := newPriorityQueue(query) - queue.PushNode(left) + queue := priorityqueue.New(func(left, right nodeIndex) bool { + return query.compare(left, right) > 0 + }) + queue.Push(left) for _, right := range rights { query.setMarks(right, markRight) - queue.PushNode(right) + queue.Push(right) } lastGeneration := generationInfinity for queue.Len() > 0 { - idx, ok := queue.PopNode() + idx, ok := queue.Pop() if !ok { break } @@ -54,7 +58,7 @@ func (query *query) paintDownToCommon(left nodeIndex, rights []nodeIndex, minGen } query.setMarks(parent, flags) - queue.PushNode(parent) + queue.Push(parent) } } diff --git a/commitquery/priority_queue.go b/commitquery/priority_queue.go deleted file mode 100644 index 7b85e563..00000000 --- a/commitquery/priority_queue.go +++ /dev/null @@ -1,32 +0,0 @@ -package commitquery - -import internalheap "codeberg.org/lindenii/furgit/internal/heap" - -// priorityQueue orders internal nodes using one query context's comparator. -type priorityQueue struct { - items *internalheap.Heap[nodeIndex] -} - -// newPriorityQueue builds one empty priority queue over one query context. -func newPriorityQueue(query *query) *priorityQueue { - return &priorityQueue{ - items: internalheap.New(func(left, right nodeIndex) bool { - return query.compare(left, right) > 0 - }), - } -} - -// Len reports the number of queued items. -func (queue *priorityQueue) Len() int { - return queue.items.Len() -} - -// PushNode inserts one internal node. -func (queue *priorityQueue) PushNode(idx nodeIndex) { - queue.items.Push(idx) -} - -// PopNode removes the highest-priority internal node. -func (queue *priorityQueue) PopNode() (nodeIndex, bool) { - return queue.items.Pop() -} |
