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) }