36 lines
492 B
Go
36 lines
492 B
Go
package fifo
|
|
|
|
import "fmt"
|
|
|
|
type FIFO[T any] []T
|
|
|
|
func New[T any](items ...T) *FIFO[T] {
|
|
f := FIFO[T](items)
|
|
return &f
|
|
}
|
|
|
|
func (f *FIFO[T]) Push(item T) {
|
|
*f = append(*f, item)
|
|
}
|
|
|
|
func (f *FIFO[T]) Empty() bool {
|
|
return len(*f) == 0
|
|
}
|
|
|
|
func (f *FIFO[T]) MustPop() T {
|
|
var item T
|
|
|
|
*f, item = (*f)[:len(*f)-1], (*f)[len(*f)-1]
|
|
return item
|
|
}
|
|
|
|
func (f *FIFO[T]) Pop() (T, error) {
|
|
var item T
|
|
|
|
if f.Empty() {
|
|
return item, fmt.Errorf("stack is exhausted")
|
|
}
|
|
|
|
return f.MustPop(), nil
|
|
}
|