aboutsummaryrefslogtreecommitdiff
path: root/internal/priorityqueue
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-04-02 06:23:30 +0000
committerGravatar Runxi Yu2026-04-02 06:28:39 +0000
commita041d523de389b65b98a5373a8034041db2a8d83 (patch)
tree7b423dc735f463be616045f2c3c2095a7737aca7 /internal/priorityqueue
parentresearch: Add dynamic pack resources (diff)
signatureNo signature
*: Remove
Diffstat (limited to 'internal/priorityqueue')
-rw-r--r--internal/priorityqueue/doc.go2
-rw-r--r--internal/priorityqueue/len.go6
-rw-r--r--internal/priorityqueue/new.go6
-rw-r--r--internal/priorityqueue/pop.go21
-rw-r--r--internal/priorityqueue/push.go7
-rw-r--r--internal/priorityqueue/queue.go9
-rw-r--r--internal/priorityqueue/queue_test.go36
-rw-r--r--internal/priorityqueue/sift_down.go24
-rw-r--r--internal/priorityqueue/sift_up.go13
9 files changed, 0 insertions, 124 deletions
diff --git a/internal/priorityqueue/doc.go b/internal/priorityqueue/doc.go
deleted file mode 100644
index 2cdd8522..00000000
--- a/internal/priorityqueue/doc.go
+++ /dev/null
@@ -1,2 +0,0 @@
-// Package priorityqueue provides a simple priority queue.
-package priorityqueue
diff --git a/internal/priorityqueue/len.go b/internal/priorityqueue/len.go
deleted file mode 100644
index aca8e0ce..00000000
--- a/internal/priorityqueue/len.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package priorityqueue
-
-// Len reports the number of queued items.
-func (queue *Queue[T]) Len() int {
- return len(queue.items)
-}
diff --git a/internal/priorityqueue/new.go b/internal/priorityqueue/new.go
deleted file mode 100644
index bf1c1819..00000000
--- a/internal/priorityqueue/new.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package priorityqueue
-
-// New builds one empty priority queue ordered by less.
-func New[T any](less func(left, right T) bool) *Queue[T] {
- return &Queue[T]{less: less}
-}
diff --git a/internal/priorityqueue/pop.go b/internal/priorityqueue/pop.go
deleted file mode 100644
index 2190b065..00000000
--- a/internal/priorityqueue/pop.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package priorityqueue
-
-// Pop removes one highest-priority item.
-func (queue *Queue[T]) Pop() (T, bool) {
- if len(queue.items) == 0 {
- var zero T
-
- return zero, false
- }
-
- last := len(queue.items) - 1
- top := queue.items[0]
- queue.items[0] = queue.items[last]
- queue.items = queue.items[:last]
-
- if len(queue.items) > 0 {
- queue.siftDown(0)
- }
-
- return top, true
-}
diff --git a/internal/priorityqueue/push.go b/internal/priorityqueue/push.go
deleted file mode 100644
index d0c6cadd..00000000
--- a/internal/priorityqueue/push.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package priorityqueue
-
-// Push inserts one item.
-func (queue *Queue[T]) Push(item T) {
- queue.items = append(queue.items, item)
- queue.siftUp(len(queue.items) - 1)
-}
diff --git a/internal/priorityqueue/queue.go b/internal/priorityqueue/queue.go
deleted file mode 100644
index d57e4791..00000000
--- a/internal/priorityqueue/queue.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package priorityqueue
-
-// Queue is one slice-backed priority queue.
-//
-// Labels: MT-Unsafe.
-type Queue[T any] struct {
- items []T
- less func(left, right T) bool
-}
diff --git a/internal/priorityqueue/queue_test.go b/internal/priorityqueue/queue_test.go
deleted file mode 100644
index f6ab7833..00000000
--- a/internal/priorityqueue/queue_test.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package priorityqueue_test
-
-import (
- "slices"
- "testing"
-
- "codeberg.org/lindenii/furgit/internal/priorityqueue"
-)
-
-func TestQueueAscending(t *testing.T) {
- t.Parallel()
-
- queue := priorityqueue.New(func(left, right int) bool {
- return left < right
- })
-
- for _, value := range []int{5, 1, 4, 3, 2} {
- queue.Push(value)
- }
-
- var got []int
-
- for queue.Len() > 0 {
- value, ok := queue.Pop()
- if !ok {
- t.Fatal("Pop should succeed")
- }
-
- got = append(got, value)
- }
-
- want := []int{1, 2, 3, 4, 5}
- if !slices.Equal(got, want) {
- t.Fatalf("pop order = %v, want %v", got, want)
- }
-}
diff --git a/internal/priorityqueue/sift_down.go b/internal/priorityqueue/sift_down.go
deleted file mode 100644
index f14fe93b..00000000
--- a/internal/priorityqueue/sift_down.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package priorityqueue
-
-func (queue *Queue[T]) siftDown(idx int) {
- for {
- left := idx*2 + 1
- if left >= len(queue.items) {
- return
- }
-
- best := left
-
- right := left + 1
- if right < len(queue.items) && queue.less(queue.items[right], queue.items[left]) {
- best = right
- }
-
- if !queue.less(queue.items[best], queue.items[idx]) {
- return
- }
-
- queue.items[idx], queue.items[best] = queue.items[best], queue.items[idx]
- idx = best
- }
-}
diff --git a/internal/priorityqueue/sift_up.go b/internal/priorityqueue/sift_up.go
deleted file mode 100644
index 7ff4453f..00000000
--- a/internal/priorityqueue/sift_up.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package priorityqueue
-
-func (queue *Queue[T]) siftUp(idx int) {
- for idx > 0 {
- parent := (idx - 1) / 2
- if !queue.less(queue.items[idx], queue.items[parent]) {
- return
- }
-
- queue.items[idx], queue.items[parent] = queue.items[parent], queue.items[idx]
- idx = parent
- }
-}