-
Notifications
You must be signed in to change notification settings - Fork 0
/
queue.go
48 lines (41 loc) · 1.15 KB
/
queue.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package pubsub
// Node represents a type queue node. In other languages this would be
// simply a generic tuple of type <T>
type Node struct {
event Event
done func()
}
// Queue represents a single instance of a queue structure.
// Under the hood, it implements a first in, first out (FIFO), data
// structure.
//
// No concurrency guarantees are created for the queue structure, it
// is expected to roll your own when interacting with the Queue.
type Queue struct {
nodes []Node
}
// NewQueue creates a queue.
func NewQueue() *Queue {
return &Queue{}
}
// Push appends an element to the back of the queue. Implements FIFO when
// elements are removed with Pop
func (f *Queue) Push(event Node) {
f.nodes = append(f.nodes, event)
}
// Pop removes and returns the element from the front of the queue.
// Implements FIFO when used with Push().
//
// Returns false if the queue is empty
func (f *Queue) Pop() (Node, bool) {
if len(f.nodes) == 0 {
return Node{}, true
}
var node Node
node, f.nodes = f.nodes[0], f.nodes[1:]
return node, false
}
// Len returns the number of elements currently stored in the queue.
func (f *Queue) Len() int {
return len(f.nodes)
}