The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/services/authn/authnimpl/priority_queue.go

34 lines
758 B

package authnimpl
func newQueue[T any]() *queue[T] {
return &queue[T]{items: []queueItem[T]{}}
}
type queue[T any] struct {
items []queueItem[T]
}
type queueItem[T any] struct {
v T
p uint
}
func (q *queue[T]) insert(v T, p uint) {
// no items in the queue so we just add it
if len(q.items) == 0 {
q.items = append(q.items, queueItem[T]{v, p})
return
}
// find the position in the queue the item should be placed based on priority
for i, item := range q.items {
if p < item.p {
q.items = append(q.items[:i+1], q.items[i:]...)
q.items[i] = queueItem[T]{v, p}
return
}
}
// item did not have higher priority then what is in the queue currently, so we need to add it to the end
q.items = append(q.items, queueItem[T]{v, p})
}