43 lines
925 B
Go
43 lines
925 B
Go
package pool
|
|
|
|
import "github.com/gobwas/pool/internal/pmath"
|
|
|
|
// Option configures pool.
|
|
type Option func(Config)
|
|
|
|
// Config describes generic pool configuration.
|
|
type Config interface {
|
|
AddSize(n int)
|
|
SetSizeMapping(func(int) int)
|
|
}
|
|
|
|
// WithSizeLogRange returns an Option that will add logarithmic range of
|
|
// pooling sizes containing [min, max] values.
|
|
func WithLogSizeRange(min, max int) Option {
|
|
return func(c Config) {
|
|
pmath.LogarithmicRange(min, max, func(n int) {
|
|
c.AddSize(n)
|
|
})
|
|
}
|
|
}
|
|
|
|
// WithSize returns an Option that will add given pooling size to the pool.
|
|
func WithSize(n int) Option {
|
|
return func(c Config) {
|
|
c.AddSize(n)
|
|
}
|
|
}
|
|
|
|
func WithSizeMapping(sz func(int) int) Option {
|
|
return func(c Config) {
|
|
c.SetSizeMapping(sz)
|
|
}
|
|
}
|
|
|
|
func WithLogSizeMapping() Option {
|
|
return WithSizeMapping(pmath.CeilToPowerOfTwo)
|
|
}
|
|
|
|
func WithIdentitySizeMapping() Option {
|
|
return WithSizeMapping(pmath.Identity)
|
|
}
|