stream-vbyte 0.3.0

Encode and decode numbers in the Stream VByte format
Documentation
[![](https://img.shields.io/crates/v/stream-vbyte.svg)](https://crates.io/crates/stream-vbyte) [![](https://docs.rs/stream-vbyte/badge.svg)](https://docs.rs/stream-vbyte/) [![Build Status](https://semaphoreci.com/api/v1/marshallpierce/stream-vbyte-rust/branches/master/shields_badge.svg)](https://semaphoreci.com/marshallpierce/stream-vbyte-rust)

A port of Stream VByte to Rust.

Stream VByte is a variable-length unsigned int encoding designed to make SIMD processing more efficient.

See https://lemire.me/blog/2017/09/27/stream-vbyte-breaking-new-speed-records-for-integer-compression/ and https://arxiv.org/pdf/1709.08990.pdf for details on the format. The reference C implementation is https://github.com/lemire/streamvbyte.

# Usage

See the [documentation](https://docs.rs/stream-vbyte/).

# Play with the CLI example

There's a `cli.rs` example provided that demonstrates encoding and decoding.

To encode some numbers, provide numbers (one per line) to stdin, and the encoded result will be written to stdout.

Example using `jot` to produce the numbes `1` to `100`: `jot 100 | cargo run --example cli -- enc | base64`

Output, with cargo build output removed (the "Encoded ..." is on stderr for human convenience):

```
Encoded 100 numbers
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8g
ISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ
WltcXV5fYGFiY2Q=
```

There's a corresponding decode mode that reads the encoded format on stdin and emits the contents, one number per line. Here, we encode some numbers then decode them again: `jot 10 | cargo run --example cli -- enc | cargo run --example cli -- dec -c 10`

```
Encoded 10 numbers
1
2
3
4
5
6
7
8
9
10
Decoded 10 numbers

```

# Maintainers

To generate the lookup tables:

```
cargo run --example generate_decode_table > tmp/tables.rs && mv tmp/tables.rs src/tables.rs
```

To run the tests (on recent Intel):

```
RUSTFLAGS='-C target-feature=+ssse3,+sse4.1' cargo +nightly test --all-features
```

To run the benchmarks:

```
RUSTFLAGS='-C target-feature=+ssse3,+sse4.1' cargo +nightly bench --all-features
```