github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/sstable/compression_nocgo.go (about) 1 // Copyright 2021 The LevelDB-Go and Pebble Authors. All rights reserved. Use 2 // of this source code is governed by a BSD-style license that can be found in 3 // the LICENSE file. 4 5 //go:build !cgo 6 // +build !cgo 7 8 package sstable 9 10 import "github.com/klauspost/compress/zstd" 11 12 // decodeZstd decompresses b with the Zstandard algorithm. 13 // It reuses the preallocated capacity of decodedBuf if it is sufficient. 14 // On success, it returns the decoded byte slice. 15 func decodeZstd(decodedBuf, b []byte) ([]byte, error) { 16 decoder, _ := zstd.NewReader(nil) 17 defer decoder.Close() 18 return decoder.DecodeAll(b, decodedBuf[:0]) 19 } 20 21 // encodeZstd compresses b with the Zstandard algorithm at default compression 22 // level (level 3). It reuses the preallocated capacity of compressedBuf if it 23 // is sufficient. The subslice `compressedBuf[:varIntLen]` should already encode 24 // the length of `b` before calling encodeZstd. It returns the encoded byte 25 // slice, including the `compressedBuf[:varIntLen]` prefix. 26 func encodeZstd(compressedBuf []byte, varIntLen int, b []byte) []byte { 27 encoder, _ := zstd.NewWriter(nil) 28 defer encoder.Close() 29 return encoder.EncodeAll(b, compressedBuf[:varIntLen]) 30 }