summaryrefslogtreecommitdiff
path: root/golang/pkg/api/priority_queue.go
diff options
context:
space:
mode:
Diffstat (limited to 'golang/pkg/api/priority_queue.go')
-rw-r--r--golang/pkg/api/priority_queue.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/golang/pkg/api/priority_queue.go b/golang/pkg/api/priority_queue.go
new file mode 100644
index 0000000..077c8f7
--- /dev/null
+++ b/golang/pkg/api/priority_queue.go
@@ -0,0 +1,44 @@
+package api
+
+type Request struct {
+ index int
+ priority int
+
+ method string
+ path string
+ payload any
+ resp chan *Response
+}
+
+type PriorityQueue []*Request
+
+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) {
+ n := len(*pq)
+ item := x.(*Request)
+ item.index = n
+ *pq = append(*pq, item)
+}
+
+func (pq *PriorityQueue) Pop() any {
+ old := *pq
+ n := len(old)
+ item := old[n-1]
+ old[n-1] = nil // avoid memory leak
+ item.index = -1 // for safety
+ *pq = old[0 : n-1]
+ return item
+}