-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathnull_queue.go
54 lines (42 loc) · 896 Bytes
/
null_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
49
50
51
52
53
54
package gocq
import (
"sync/atomic"
)
// nullQueue is a no-op implementation of IQueue interface
type nullQueue struct {
len atomic.Int64
}
// Initialize a default nullQueue instance
var defaultNullQueue IQueue
// getNullQueue returns a singleton instance of nullQueue
func getNullQueue() IQueue {
if defaultNullQueue != nil {
return defaultNullQueue
}
defaultNullQueue = &nullQueue{}
return defaultNullQueue
}
func (nq *nullQueue) NotificationChannel() <-chan struct{} {
return nil
}
func (nq *nullQueue) Dequeue() (any, bool) {
nq.len.Add(-1)
return nil, false
}
func (nq *nullQueue) Enqueue(item any) bool {
nq.len.Add(1)
return false
}
func (nq *nullQueue) Len() int {
return int(nq.len.Load())
}
func (nq *nullQueue) Values() []any {
return []any{}
}
func (nq *nullQueue) Purge() {
nq.len.Store(0)
}
func (nq *nullQueue) Close() error {
nq.Purge()
return nil
}