mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 01:43:16 +01:00
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package fn
|
|
|
|
// Queue is a generic queue implementation.
|
|
type Queue[T any] struct {
|
|
items []T
|
|
}
|
|
|
|
// NewQueue creates a new Queue.
|
|
func NewQueue[T any](startingItems ...T) Queue[T] {
|
|
return Queue[T]{
|
|
items: startingItems,
|
|
}
|
|
}
|
|
|
|
// Enqueue adds one or more an items to the end of the Queue.
|
|
func (q *Queue[T]) Enqueue(value ...T) {
|
|
q.items = append(q.items, value...)
|
|
}
|
|
|
|
// Dequeue removes an element from the front of the Queue. If there're no items
|
|
// in the queue, then None is returned.
|
|
func (q *Queue[T]) Dequeue() Option[T] {
|
|
if len(q.items) == 0 {
|
|
return None[T]()
|
|
}
|
|
|
|
value := q.items[0]
|
|
q.items = q.items[1:]
|
|
|
|
return Some(value)
|
|
}
|
|
|
|
// Peek returns the first item in the queue without removing it. If the queue
|
|
// is empty, then None is returned.
|
|
func (q *Queue[T]) Peek() Option[T] {
|
|
if q.IsEmpty() {
|
|
return None[T]()
|
|
}
|
|
|
|
return Some(q.items[0])
|
|
}
|
|
|
|
// IsEmpty returns true if the Queue is empty
|
|
func (q *Queue[T]) IsEmpty() bool {
|
|
return len(q.items) == 0
|
|
}
|
|
|
|
// Size returns the number of items in the Queue
|
|
func (q *Queue[T]) Size() int {
|
|
return len(q.items)
|
|
}
|