samba/pkg/service/queue.go
2025-06-04 09:51:39 +08:00

39 lines
587 B
Go

package service
import "errors"
type Queue[T any] struct {
msg []T
}
type popResult[T any] struct {
value T
err error
}
func NewQueue[T any]() *Queue[T] {
return &Queue[T]{msg: make([]T, 256)}
}
func (q *Queue[T]) Push(msg T) {
q.msg = append(q.msg, msg)
}
func (q *Queue[T]) Pop() (T, error) {
if len(q.msg) == 0 {
p := popResult[T]{err: errors.New("empty Queue")}
return p.value, p.err
}
e, msg := q.msg[0], q.msg[1:]
q.msg = msg
return e, nil
}
func (q *Queue[T]) IsEmpty() bool {
return len(q.msg) == 0
}
func (q *Queue[T]) Size() int {
return len(q.msg)
}