package signature

import "sync"

const poolSliceMaxSize = 64 * 1024

type buffer struct {
	data []byte
}

var buffersPool = sync.Pool{
	New: func() any {
		return new(buffer)
	},
}

func newBufferFromPool(size int) *buffer {
	result := buffersPool.Get().(*buffer)
	if cap(result.data) < size {
		result.data = make([]byte, size)
	} else {
		result.data = result.data[:size]
	}
	return result
}

func returnBufferToPool(buf *buffer) {
	if cap(buf.data) > poolSliceMaxSize {
		return
	}
	buf.data = buf.data[:0]
	buffersPool.Put(buf)
}