1234567891011121314151617181920212223242526272829303132333435 |
- package rbtree
- /*
- #cgo CFLAGS: -std=c99
- int LZ4_compressBound(int isize);
- int LZ4_compress_HC(const void* src, void* dst, int srcSize, int dstCapacity, int compressionLevel);
- int LZ4_decompress_fast(const void* source, void* dest, int originalSize);
- */
- import "C"
- import "unsafe"
- // CompressUInt32Slice compresses a slice of uint32-s with LZ4.
- func CompressUInt32Slice(data []uint32) []byte {
- dstSize := C.LZ4_compressBound(C.int(len(data) * 4))
- dst := make([]byte, dstSize)
- dstSize = C.LZ4_compress_HC(
- unsafe.Pointer(&data[0]),
- unsafe.Pointer(&dst[0]),
- C.int(len(data)*4),
- dstSize,
- 12)
- finalDst := make([]byte, dstSize)
- copy(finalDst, dst[:dstSize])
- return finalDst
- }
- // DecompressUInt32Slice decompresses a slice of uint32-s previously compressed with LZ4.
- // `result` must be preallocated.
- func DecompressUInt32Slice(data []byte, result []uint32) {
- C.LZ4_decompress_fast(
- unsafe.Pointer(&data[0]),
- unsafe.Pointer(&result[0]),
- C.int(len(result)*4))
- }
|