dreamfactory_cmd/lego/utils/container/Queue.go
2023-06-09 21:58:02 +08:00

47 lines
633 B
Go

package container
import (
"container/list"
"fmt"
"sync"
)
type Queue struct {
sync.Mutex
data *list.List
}
func NewQueue() *Queue {
q := new(Queue)
q.data = list.New()
return q
}
func (q *Queue) Len() int {
return q.data.Len()
}
func (q *Queue) Push(v interface{}) {
defer q.Unlock()
q.Lock()
q.data.PushFront(v)
}
func (q *Queue) Pop() interface{} {
defer q.Unlock()
q.Lock()
iter := q.data.Back()
if iter == nil {
return nil
}
v := iter.Value
q.data.Remove(iter)
return v
}
func (q *Queue) Dump() {
for iter := q.data.Back(); iter != nil; iter = iter.Prev() {
fmt.Println("item:", iter.Value)
}
}