1
+ use cas_lib:: compression:: zstd;
2
+ use libc:: c_uchar;
3
+
4
+ #[ repr( C ) ]
5
+ pub struct ZstdCompressResult {
6
+ data : * mut c_uchar ,
7
+ length : usize
8
+ }
9
+
10
+ #[ no_mangle]
11
+ pub extern "C" fn decompress ( data_to_decompress : * const c_uchar , data_to_decompress_length : usize ) -> ZstdCompressResult {
12
+ let data_to_decompress = unsafe { std:: slice:: from_raw_parts ( data_to_decompress, data_to_decompress_length) } . to_vec ( ) ;
13
+ let mut decompressed_data = zstd:: decompress ( data_to_decompress) ;
14
+ let capacity = decompressed_data. capacity ( ) ;
15
+ decompressed_data. reserve_exact ( capacity) ;
16
+ let result = ZstdCompressResult {
17
+ data : decompressed_data. as_mut_ptr ( ) ,
18
+ length : decompressed_data. len ( )
19
+ } ;
20
+ std:: mem:: forget ( decompressed_data) ;
21
+ result
22
+ }
23
+
24
+ #[ no_mangle]
25
+ pub extern "C" fn decompress_threadpool ( data_to_decompress : * const c_uchar , data_to_decompress_length : usize ) -> ZstdCompressResult {
26
+ let data_to_decompress = unsafe { std:: slice:: from_raw_parts ( data_to_decompress, data_to_decompress_length) } . to_vec ( ) ;
27
+ let mut decompressed_data = zstd:: decompress_threadpool ( data_to_decompress) ;
28
+ let capacity = decompressed_data. capacity ( ) ;
29
+ decompressed_data. reserve_exact ( capacity) ;
30
+ let result = ZstdCompressResult {
31
+ data : decompressed_data. as_mut_ptr ( ) ,
32
+ length : decompressed_data. len ( )
33
+ } ;
34
+ std:: mem:: forget ( decompressed_data) ;
35
+ result
36
+ }
37
+
38
+ #[ no_mangle]
39
+ pub extern "C" fn compress ( data_to_compress : * const c_uchar , data_to_compress_length : usize , level : usize ) -> ZstdCompressResult {
40
+ let data_to_compress = unsafe { std:: slice:: from_raw_parts ( data_to_compress, data_to_compress_length) } . to_vec ( ) ;
41
+ let mut compressed_data = zstd:: compress ( data_to_compress, level as i32 ) ;
42
+ let capacity = compressed_data. capacity ( ) ;
43
+ compressed_data. reserve_exact ( capacity) ;
44
+ let result = ZstdCompressResult {
45
+ data : compressed_data. as_mut_ptr ( ) ,
46
+ length : compressed_data. len ( )
47
+ } ;
48
+ std:: mem:: forget ( compressed_data) ;
49
+ result
50
+ }
51
+
52
+ #[ no_mangle]
53
+ pub extern "C" fn compress_threadpool ( data_to_compress : * const c_uchar , data_to_compress_length : usize , level : usize ) -> ZstdCompressResult {
54
+ let data_to_compress = unsafe { std:: slice:: from_raw_parts ( data_to_compress, data_to_compress_length) } . to_vec ( ) ;
55
+ let mut compressed_data = zstd:: compress_threadpool ( data_to_compress, level as i32 ) ;
56
+ let capacity = compressed_data. capacity ( ) ;
57
+ compressed_data. reserve_exact ( capacity) ;
58
+ let result = ZstdCompressResult {
59
+ data : compressed_data. as_mut_ptr ( ) ,
60
+ length : compressed_data. len ( )
61
+ } ;
62
+ std:: mem:: forget ( compressed_data) ;
63
+ result
64
+ }
0 commit comments