From 427cc77fa3633aca7c4c3377fa26b0e70921a7b5 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 6 May 2024 00:18:22 +0200 Subject: [golang] bootstrapped a client in yet another language --- golang/pkg/api/priority_queue.go | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 golang/pkg/api/priority_queue.go (limited to 'golang/pkg/api/priority_queue.go') 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 +} -- cgit v1.2.3