-
Notifications
You must be signed in to change notification settings - Fork 0
/
pools.go
64 lines (53 loc) · 983 Bytes
/
pools.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
55
56
57
58
59
60
61
62
63
64
package flate
import (
"bytes"
"strings"
"sync"
"github.com/chronos-tachyon/assert"
)
var sbPool = sync.Pool{
New: func() interface{} {
sb := new(strings.Builder)
sb.Grow(256)
return sb
},
}
func takeStringsBuilder() *strings.Builder {
return sbPool.Get().(*strings.Builder)
}
func giveStringsBuilder(sb *strings.Builder) {
assert.NotNil(&sb)
sb.Reset()
sbPool.Put(sb)
}
var bbPool = sync.Pool{
New: func() interface{} {
bb := new(bytes.Buffer)
bb.Grow(256)
return bb
},
}
func takeBytesBuffer() *bytes.Buffer {
return bbPool.Get().(*bytes.Buffer)
}
func giveBytesBuffer(bb *bytes.Buffer) {
assert.NotNil(&bb)
bb.Reset()
bbPool.Put(bb)
}
var tokenPool = sync.Pool{
New: func() interface{} {
ptr := new([]token)
*ptr = make([]token, 0, 256)
return ptr
},
}
func takeTokens() *[]token {
return tokenPool.Get().(*[]token)
}
func giveTokens(ptr *[]token) {
assert.NotNil(&ptr)
assert.NotNil(ptr)
*ptr = (*ptr)[:0]
tokenPool.Put(ptr)
}