Add a byte buffer pool

This commit is contained in:
PhatPhuckDave
2024-07-22 22:58:09 +02:00
parent 4fcc1d88ff
commit c558e54750

49
pdu/bufpool.go Normal file
View File

@@ -0,0 +1,49 @@
package pdu
import (
"sync"
)
type BufferPoolManager struct {
pools map[int]*sync.Pool
mu sync.Mutex
}
func NewBufferPoolManager() *BufferPoolManager {
return &BufferPoolManager{
pools: make(map[int]*sync.Pool),
}
}
func (bpm *BufferPoolManager) GetBuffer(size int) *([]uint8) {
bpm.mu.Lock()
pool, exists := bpm.pools[size]
if !exists {
pool = &sync.Pool{
New: func() interface{} {
buf := make([]uint8, size)
return &buf
},
}
bpm.pools[size] = pool
}
bpm.mu.Unlock()
return pool.Get().(*[]uint8)
}
func (bpm *BufferPoolManager) PutBuffer(buf *([]uint8)) {
size := len(*buf)
bpm.mu.Lock()
pool, exists := bpm.pools[size]
if !exists {
bpm.mu.Unlock()
return
}
bpm.mu.Unlock()
// Reset buffer (optional)
for i := range *buf {
(*buf)[i] = 0
}
pool.Put(buf)
}