Files
advent-of-code-2025/internal/queue/queue.go
T

56 lines
836 B
Go

// Package queue provides a thread-safe FIFO queue implementation.
package queue
import "sync"
type Queue[T any] interface {
Enqueue(item T)
Dequeue() (T, bool)
IsEmpty() bool
Size() int
}
type queue[T any] struct {
items []T
lock sync.Mutex
}
func New[T any]() Queue[T] {
return &queue[T]{items: []T{}}
}
func (q *queue[T]) Enqueue(item T) {
q.lock.Lock()
defer q.lock.Unlock()
q.items = append(q.items, item)
}
func (q *queue[T]) Dequeue() (T, bool) {
q.lock.Lock()
defer q.lock.Unlock()
if len(q.items) == 0 {
var zero T
return zero, false
}
item := q.items[0]
q.items = q.items[1:]
return item, true
}
func (q *queue[T]) IsEmpty() bool {
q.lock.Lock()
defer q.lock.Unlock()
return len(q.items) == 0
}
func (q *queue[T]) Size() int {
q.lock.Lock()
defer q.lock.Unlock()
return len(q.items)
}