tuple and code cleanup

This commit is contained in:
2026-02-09 16:31:39 +03:00
parent 4ba746956a
commit 06327013fd
5 changed files with 222 additions and 133 deletions

View File

@@ -10,62 +10,54 @@ var QueueFullErr = errors.New("queue full")
type Queue[T any] struct {
size uint64
mu sync.RWMutex
queue []T
queue Slice[T]
}
func CreateQueue[T any](size uint64) *Queue[T] {
return &Queue[T]{
queue: make([]T, 0, size),
size: size,
}
return &Queue[T]{queue: make(Slice[T], 0, size), size: size}
}
func (q *Queue[T]) Len() uint64 {
q.mu.RLock()
defer q.mu.RUnlock()
return uint64(q.queue.Len())
}
func (q *Queue[T]) IsEmpty() bool { return q.Len() == 0 }
func (q *Queue[T]) IsFull() bool { return q.Len() == q.size }
func (q *Queue[T]) Size() uint64 { return q.size }
func (q *Queue[T]) Enqueue(el T) error {
if q.IsFull() {
return QueueFullErr
}
q.queue = append(q.queue, el)
q.queue = q.queue.Push(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 q.Length() == 0
}
func (q *Queue[T]) IsFull() bool {
return q.Length() == q.size
}
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]
el := q.queue.Get(0)
q.mu.RUnlock()
if q.Length() == 1 {
if q.Len() == 1 {
q.mu.Lock()
q.queue = make([]T, 0)
q.queue = make(Slice[T], 0)
q.mu.Unlock()
return el
}
q.mu.Lock()
q.queue = q.queue[1:]
q.queue = q.queue.Pop(0)
q.mu.Unlock()
return el
}
func (q *Queue[T]) Raw() []T {
func (q *Queue[T]) Peak() T {
q.mu.RLock()
defer q.mu.RUnlock()
return q.queue.Get(0)
}
func (q *Queue[T]) Raw() Slice[T] {
return q.queue
}