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
 | |
| }
 |