aboutsummaryrefslogtreecommitdiff
path: root/core/pool.go
blob: 484b342c68cf659941aada89d4092622e7e241c2 (plain)
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
package core

import "sync"


const (
	DefaultBufferSize = 1024
	MaxBufferSize = 64 * 1024
)

var bytesPool = sync.Pool{
	New: func () any {
		b := make([]byte, DefaultBufferSize)
		return &b
	},
}

func GetBuffer(size int) []byte {
	bufPtr := bytesPool.Get().(*[]byte)

	buf := *bufPtr


	if size > cap(buf) {
		buf = make([]byte, size)
	}

	return buf[:size]
}


func PutBuffer(buf []byte) {
	if cap(buf) < MaxBufferSize{
		// reset
		buf = buf[:0]
		bytesPool.Put(&buf)
	}
}