1 Star 0 Fork 0

sy_183 / go-common

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
default-buffer-pool.go 1.04 KB
一键复制 编辑 原始数据 按行查看 历史
sy_183 提交于 2023-07-20 16:10 . 修改了模块名称
package pool
import "gitee.com/sy_183/go-common/option"
type DefaultBufferPool struct {
pool Pool[*Buffer]
buffer *Buffer
}
func NewDefaultBufferPool(size uint, reversed uint, poolProvider PoolProvider[*Buffer], poolOptions ...option.AnyOption) *DefaultBufferPool {
return &DefaultBufferPool{pool: poolProvider(func(p Pool[*Buffer]) *Buffer {
return NewBuffer(size, reversed).SetOnReleased(func(buffer *Buffer) {
p.Put(buffer)
})
}, poolOptions...)}
}
func (p *DefaultBufferPool) getBuffer() *Buffer {
if p.buffer == nil {
buffer := p.pool.Get()
if buffer == nil {
return nil
}
p.buffer = buffer.Use()
}
return p.buffer
}
func (p *DefaultBufferPool) Get() []byte {
if buffer := p.getBuffer(); buffer != nil {
if buf := buffer.Get(); buf != nil {
return buf
}
p.buffer.Release()
p.buffer = nil
if buffer := p.getBuffer(); buffer != nil {
return buffer.Get()
}
}
return nil
}
func (p *DefaultBufferPool) Alloc(size uint) *Data {
if p.buffer == nil {
p.buffer = p.pool.Get().Use()
}
return p.buffer.Alloc(size)
}
1
https://gitee.com/sy_183/go-common.git
git@gitee.com:sy_183/go-common.git
sy_183
go-common
go-common
v1.0.4

搜索帮助