lz4.go 789 B

123456789101112131415161718192021222324252627282930313233
  1. package rbtree
  2. /*
  3. #cgo CFLAGS: -std=c99
  4. #include "lz4hc.c"
  5. */
  6. import "C"
  7. import "unsafe"
  8. // CompressUInt32Slice compresses a slice of uint32-s with LZ4.
  9. func CompressUInt32Slice(data []uint32) []byte {
  10. dstSize := C.LZ4_compressBound(C.int(len(data) * 4))
  11. dst := make([]byte, dstSize)
  12. dstSize = C.LZ4_compress_HC(
  13. unsafe.Pointer(&data[0]),
  14. unsafe.Pointer(&dst[0]),
  15. C.int(len(data)*4),
  16. dstSize,
  17. 12)
  18. finalDst := make([]byte, dstSize)
  19. copy(finalDst, dst[:dstSize])
  20. return finalDst
  21. }
  22. // DecompressUInt32Slice decompresses a slice of uint32-s previously compressed with LZ4.
  23. // `result` must be preallocated.
  24. func DecompressUInt32Slice(data []byte, result []uint32) {
  25. C.LZ4_decompress_fast(
  26. unsafe.Pointer(&data[0]),
  27. unsafe.Pointer(&result[0]),
  28. C.int(len(result)*4))
  29. }