This commit is contained in:
2025-11-05 11:38:09 +03:00
parent 13eb3d45de
commit 7f248fff62
6 changed files with 253 additions and 71 deletions

View File

@@ -1,12 +1,18 @@
package laniakea
import "fmt"
import (
"errors"
"sync"
)
type Queue[T any] struct {
queue []T
size uint64
mu sync.RWMutex
queue []T
}
var QueueFullError = errors.New("queue full")
func CreateQueue[T any](size uint64) *Queue[T] {
return &Queue[T]{
queue: make([]T, 0),
@@ -16,18 +22,20 @@ func CreateQueue[T any](size uint64) *Queue[T] {
func (q *Queue[T]) Enqueue(el T) error {
if q.IsFull() {
return fmt.Errorf("queue full")
return QueueFullError
}
q.queue = append(q.queue, el)
return nil
}
func (q *Queue[T]) Peak() T {
q.mu.RLock()
defer q.mu.RUnlock()
return q.queue[0]
}
func (q *Queue[T]) IsEmpty() bool {
return len(q.queue) == 0
return q.Length() == 0
}
func (q *Queue[T]) IsFull() bool {
@@ -35,16 +43,26 @@ func (q *Queue[T]) IsFull() bool {
}
func (q *Queue[T]) Length() uint64 {
q.mu.RLock()
defer q.mu.RUnlock()
return uint64(len(q.queue))
}
func (q *Queue[T]) Dequeue() T {
q.mu.RLock()
el := q.queue[0]
q.mu.RUnlock()
if q.Length() == 1 {
q.mu.Lock()
q.queue = make([]T, 0)
q.mu.Unlock()
return el
}
q.mu.Lock()
q.queue = q.queue[1:]
q.mu.Unlock()
return el
}