-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.go
46 lines (40 loc) · 832 Bytes
/
utils.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
package porttools
// Queue is an implementation of a FIFO container type.
type Queue struct {
len int
values []*Node
}
// Enqueue stores value in the queue.
func (queue *Queue) Enqueue(node *Node) {
queue.len++
if queue.len-1 == 0 {
queue.values[0] = node
} else {
queue.values[queue.len] = node
}
}
// Dequeue removes and returns value from the queue.
func (queue *Queue) Dequeue() (node *Node) {
queue.len--
if queue.len+1 == 0 {
return nil
}
node = queue.values[0]
queue.values = queue.values[0:]
return node
}
// NewQueue instantiates a new Queue.
func NewQueue() *Queue {
q := Queue{
len: 0,
}
return &q
}
// Node represents data stored in a container.
type Node struct {
data interface{}
}
// NewNode instantiates a new Node.
func NewNode(data interface{}) *Node {
return &Node{data: data}
}