26 lines
389 B
Go
26 lines
389 B
Go
|
|
package treerack
|
||
|
|
|
||
|
|
type pool[T any] struct {
|
||
|
|
create func() T
|
||
|
|
values []T
|
||
|
|
}
|
||
|
|
|
||
|
|
func newPool[T any](create func() T) *pool[T] {
|
||
|
|
return &pool[T]{create: create}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p *pool[T]) get() T {
|
||
|
|
if len(p.values) == 0 {
|
||
|
|
return p.create()
|
||
|
|
}
|
||
|
|
|
||
|
|
last := len(p.values) - 1
|
||
|
|
v := p.values[last]
|
||
|
|
p.values = p.values[:last]
|
||
|
|
return v
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p *pool[T]) put(v T) {
|
||
|
|
p.values = append(p.values, v)
|
||
|
|
}
|