pkg/prompb/pool.go (22 lines of code) (raw):
package prompb
import "sync"
type Resetter interface {
Reset()
}
type Pool[T Resetter] struct {
p *sync.Pool
New func() T
}
func NewPool[T Resetter](new func() T) *Pool[T] {
return &Pool[T]{
p: &sync.Pool{New: func() interface{} { return new() }},
New: new,
}
}
func (p *Pool[T]) Put(r T) {
r.Reset()
p.p.Put(r)
}
func (p *Pool[T]) Get() T {
return p.p.Get().(T)
}