39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package lz4
 | 
						|
 | 
						|
// #cgo CFLAGS: -O3
 | 
						|
// #include "src/lz4hc.h"
 | 
						|
// #include "src/lz4hc.c"
 | 
						|
import "C"
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
)
 | 
						|
 | 
						|
// CompressHC compresses in and puts the content in out. len(out)
 | 
						|
// should have enough space for the compressed data (use CompressBound
 | 
						|
// to calculate). Returns the number of bytes in the out slice. Determines
 | 
						|
// the compression level automatically.
 | 
						|
func CompressHC(in, out []byte) (int, error) {
 | 
						|
	// 0 automatically sets the compression level.
 | 
						|
	return CompressHCLevel(in, out, 0)
 | 
						|
}
 | 
						|
 | 
						|
// CompressHCLevel compresses in at the given compression level and puts the
 | 
						|
// content in out. len(out) should have enough space for the compressed data
 | 
						|
// (use CompressBound to calculate). Returns the number of bytes in the out
 | 
						|
// slice. To automatically choose the compression level, use 0. Otherwise, use
 | 
						|
// any value in the inclusive range 1 (worst) through 16 (best). Most
 | 
						|
// applications will prefer CompressHC.
 | 
						|
func CompressHCLevel(in, out []byte, level int) (outSize int, err error) {
 | 
						|
	// LZ4HC does not handle empty buffers. Pass through to Compress.
 | 
						|
	if len(in) == 0 || len(out) == 0 {
 | 
						|
		return Compress(in, out)
 | 
						|
	}
 | 
						|
 | 
						|
	outSize = int(C.LZ4_compressHC2_limitedOutput(p(in), p(out), clen(in), clen(out), C.int(level)))
 | 
						|
	if outSize == 0 {
 | 
						|
		err = fmt.Errorf("insufficient space for compression")
 | 
						|
	}
 | 
						|
	return
 | 
						|
}
 |