diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-pools/henc.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-pools/henc.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/vendor/codeberg.org/gruf/go-pools/henc.go b/vendor/codeberg.org/gruf/go-pools/henc.go new file mode 100644 index 000000000..cad905af4 --- /dev/null +++ b/vendor/codeberg.org/gruf/go-pools/henc.go @@ -0,0 +1,46 @@ +package pools + +import ( + "hash" + "sync" + + "codeberg.org/gruf/go-hashenc" +) + +// HashEncoderPool is a pooled allocator for hashenc.HashEncoder objects. +type HashEncoderPool interface { + // Get fetches a hashenc.HashEncoder from pool + Get() hashenc.HashEncoder + + // Put places supplied hashenc.HashEncoder back in pool + Put(hashenc.HashEncoder) +} + +// NewHashEncoderPool returns a newly instantiated hashenc.HashEncoder pool. +func NewHashEncoderPool(hash func() hash.Hash, enc func() hashenc.Encoder) HashEncoderPool { + return &hencPool{ + pool: sync.Pool{ + New: func() interface{} { + return hashenc.New(hash(), enc()) + }, + }, + size: hashenc.New(hash(), enc()).Size(), + } +} + +// hencPool is our implementation of HashEncoderPool. +type hencPool struct { + pool sync.Pool + size int +} + +func (p *hencPool) Get() hashenc.HashEncoder { + return p.pool.Get().(hashenc.HashEncoder) +} + +func (p *hencPool) Put(henc hashenc.HashEncoder) { + if henc.Size() < p.size { + return + } + p.pool.Put(henc) +} |