package zstd
import (
"errors"
"runtime"
"sync"
"weak"
)
var weakMu sync .Mutex
var simpleEnc weak .Pointer [Encoder ]
var simpleDec weak .Pointer [Decoder ]
func EncodeTo (dst []byte , src []byte ) []byte {
weakMu .Lock ()
enc := simpleEnc .Value ()
if enc == nil {
var err error
enc , err = NewWriter (nil , WithEncoderConcurrency (runtime .NumCPU ()), WithWindowSize (1 <<20 ), WithLowerEncoderMem (true ), WithZeroFrames (true ))
if err != nil {
panic ("failed to create simple encoder: " + err .Error())
}
simpleEnc = weak .Make (enc )
}
weakMu .Unlock ()
return enc .EncodeAll (src , dst )
}
func DecodeTo (dst []byte , src []byte ) ([]byte , error ) {
weakMu .Lock ()
dec := simpleDec .Value ()
if dec == nil {
var err error
dec , err = NewReader (nil , WithDecoderConcurrency (runtime .NumCPU ()), WithDecoderLowmem (true ), WithDecoderMaxMemory (1 <<30 ))
if err != nil {
weakMu .Unlock ()
return nil , errors .New ("failed to create simple decoder: " + err .Error())
}
runtime .SetFinalizer (dec , func (d *Decoder ) {
d .Close ()
})
simpleDec = weak .Make (dec )
}
weakMu .Unlock ()
return dec .DecodeAll (src , dst )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .