mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-11-14 21:23:47 +08:00
tt
This commit is contained in:
63
hotgo-server/app/factory/queue/list.go
Normal file
63
hotgo-server/app/factory/queue/list.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package queue
|
||||
|
||||
import (
|
||||
"container/list"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type Queue struct {
|
||||
l *list.List
|
||||
m sync.Mutex
|
||||
}
|
||||
|
||||
func NewQueue() *Queue {
|
||||
return &Queue{l: list.New()}
|
||||
}
|
||||
|
||||
func (q *Queue) LPush(v interface{}) {
|
||||
if v == nil {
|
||||
return
|
||||
}
|
||||
q.m.Lock()
|
||||
defer q.m.Unlock()
|
||||
q.l.PushFront(v)
|
||||
}
|
||||
|
||||
func (q *Queue) RPush(v interface{}) {
|
||||
if v == nil {
|
||||
return
|
||||
}
|
||||
q.m.Lock()
|
||||
defer q.m.Unlock()
|
||||
q.l.PushBack(v)
|
||||
}
|
||||
|
||||
func (q *Queue) LPop() interface{} {
|
||||
q.m.Lock()
|
||||
defer q.m.Unlock()
|
||||
|
||||
element := q.l.Front()
|
||||
if element == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
q.l.Remove(element)
|
||||
return element.Value
|
||||
}
|
||||
|
||||
func (q *Queue) RPop() interface{} {
|
||||
q.m.Lock()
|
||||
defer q.m.Unlock()
|
||||
|
||||
element := q.l.Back()
|
||||
if element == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
q.l.Remove(element)
|
||||
return element.Value
|
||||
}
|
||||
|
||||
func (q *Queue) Len() int {
|
||||
return q.l.Len()
|
||||
}
|
||||
Reference in New Issue
Block a user