6
0
mirror of https://git.mills.io/prologic/msgbus.git synced 2024-06-28 17:51:42 +00:00
prologic-msgbus/queue.go
2017-06-03 16:16:17 +01:00

80 lines
861 B
Go

package msgbus
import (
"sync"
)
// QueueNode ...
type QueueNode struct {
data interface{}
next *QueueNode
}
// Queue ...
type Queue struct {
sync.Mutex
head *QueueNode
tail *QueueNode
size int
}
// Len ...
func (q *Queue) Len() int {
q.Lock()
defer q.Unlock()
return q.size
}
// Push ...
func (q *Queue) Push(item interface{}) {
q.Lock()
defer q.Unlock()
n := &QueueNode{data: item}
if q.tail == nil {
q.tail = n
q.head = n
} else {
q.tail.next = n
q.tail = n
}
q.size++
}
// Pop ...
func (q *Queue) Pop() interface{} {
q.Lock()
defer q.Unlock()
if q.head == nil {
return nil
}
n := q.head
q.head = n.next
if q.head == nil {
q.tail = nil
}
q.size--
return n.data
}
// Peek ...
func (q *Queue) Peek() interface{} {
q.Lock()
defer q.Unlock()
n := q.head
if n == nil {
return nil
}
return n.data
}