#integer #vbyte

streamvbyte

Rust对streamvbyte的FFI绑定

2个版本

0.1.1 2020年8月30日
0.1.0 2020年8月30日

#411 in 压缩

Apache-2.0

14KB
140

streamvbyte

Rust对streamvbyte的FFI绑定: https://github.com/lemire/streamvbyte

示例

使用encode将u32切片编码到新的buf中

use streamvbyte::encode;
let out_bytes: Vec<u8> = encode(&[1,2,44,5123,43,534]);

...或者使用encode_to_buf函数将编码结果存入现有缓冲区

use streamvbyte::{max_compressedbytes,encode_to_buf};
let input = vec![1,2,44,5123,43,534];
let max_bytes = max_compressedbytes(input.len());
let mut out_buf = vec![0;max_bytes];
let bytes_written = encode_to_buf(&input,&mut out_buf);
assert_eq!(bytes_written.unwrap(),10);

您可以使用encode_delta更有效地编码递增序列

use streamvbyte::encode_delta;
let out_bytes: Vec<u8> = encode_delta(&[1,2,44,64,71,534],0);

解码值的方式与此类似

use streamvbyte::{decode_delta,encode_delta};
let out_bytes: Vec<u8> = encode_delta(&[1,2,44,64,71,534],0);
let mut recovered = vec![0;6];
let bytes_read = decode_delta(&out_bytes,&mut recovered,0);
assert_eq!(out_bytes.len(),bytes_read);
assert_eq!(&recovered,&[1,2,44,64,71,534]);

依赖项

~0.4–1MB
~24K SLoC