mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 23:12:26 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			845 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			845 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package pools
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
 | 
						|
	"codeberg.org/gruf/go-bytes"
 | 
						|
)
 | 
						|
 | 
						|
// BufferPool is a pooled allocator for bytes.Buffer objects
 | 
						|
type BufferPool interface {
 | 
						|
	// Get fetches a bytes.Buffer from pool
 | 
						|
	Get() *bytes.Buffer
 | 
						|
 | 
						|
	// Put places supplied bytes.Buffer in pool
 | 
						|
	Put(*bytes.Buffer)
 | 
						|
}
 | 
						|
 | 
						|
// NewBufferPool returns a newly instantiated bytes.Buffer pool
 | 
						|
func NewBufferPool(size int) BufferPool {
 | 
						|
	return &bufferPool{
 | 
						|
		pool: sync.Pool{
 | 
						|
			New: func() interface{} {
 | 
						|
				return &bytes.Buffer{B: make([]byte, 0, size)}
 | 
						|
			},
 | 
						|
		},
 | 
						|
		size: size,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// bufferPool is our implementation of BufferPool
 | 
						|
type bufferPool struct {
 | 
						|
	pool sync.Pool
 | 
						|
	size int
 | 
						|
}
 | 
						|
 | 
						|
func (p *bufferPool) Get() *bytes.Buffer {
 | 
						|
	return p.pool.Get().(*bytes.Buffer)
 | 
						|
}
 | 
						|
 | 
						|
func (p *bufferPool) Put(buf *bytes.Buffer) {
 | 
						|
	if buf.Cap() < p.size {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	buf.Reset()
 | 
						|
	p.pool.Put(buf)
 | 
						|
}
 |