diff options
Diffstat (limited to 'internal/priorityqueue')
| -rw-r--r-- | internal/priorityqueue/doc.go | 2 | ||||
| -rw-r--r-- | internal/priorityqueue/len.go | 6 | ||||
| -rw-r--r-- | internal/priorityqueue/new.go | 6 | ||||
| -rw-r--r-- | internal/priorityqueue/pop.go | 21 | ||||
| -rw-r--r-- | internal/priorityqueue/push.go | 7 | ||||
| -rw-r--r-- | internal/priorityqueue/queue.go | 9 | ||||
| -rw-r--r-- | internal/priorityqueue/queue_test.go | 36 | ||||
| -rw-r--r-- | internal/priorityqueue/sift_down.go | 24 | ||||
| -rw-r--r-- | internal/priorityqueue/sift_up.go | 13 |
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 - } -} |
