optimize more allocs

This commit is contained in:
Nicolás Pazos 2023-11-01 21:35:52 -03:00 committed by Callum Styan
parent 08c3fc6ca9
commit 1ef02aad26

View file

@ -163,15 +163,22 @@ func (s *s2Compression) Decompress(data []byte) ([]byte, error) {
type zstdCompression struct { type zstdCompression struct {
level zstd.EncoderLevel level zstd.EncoderLevel
buf []byte buf []byte
r *reZstd.Decoder
w *reZstd.Encoder
} }
func (z *zstdCompression) Compress(data []byte) ([]byte, error) { func (z *zstdCompression) Compress(data []byte) ([]byte, error) {
w, err := reZstd.NewWriter(nil, reZstd.WithEncoderLevel(z.level)) var err error
if err != nil { if z.w == nil {
return nil, err z.w, err = reZstd.NewWriter(nil, reZstd.WithEncoderLevel(z.level))
if err != nil {
return nil, err
}
} }
z.w.Reset(nil)
z.buf = z.buf[:0] z.buf = z.buf[:0]
res := w.EncodeAll(data, z.buf) res := z.w.EncodeAll(data, z.buf)
if len(res) > cap(z.buf) { if len(res) > cap(z.buf) {
z.buf = res z.buf = res
} }
@ -179,12 +186,20 @@ func (z *zstdCompression) Compress(data []byte) ([]byte, error) {
} }
func (z *zstdCompression) Decompress(data []byte) ([]byte, error) { func (z *zstdCompression) Decompress(data []byte) ([]byte, error) {
decoder, err := reZstd.NewReader(nil) var err error
if z.r == nil {
z.r, err = reZstd.NewReader(nil)
if err != nil {
return nil, err
}
}
err = z.r.Reset(nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
z.buf = z.buf[:0] z.buf = z.buf[:0]
buf, err := decoder.DecodeAll(data, z.buf) buf, err := z.r.DecodeAll(data, z.buf)
if err != nil { if err != nil {
return nil, err return nil, err
} }