Add this to your Cargo.toml:
[dependencies] bit-vec = "0.8"
Since Rust 2018, extern crate
is no longer mandatory. If your edition is old (Rust 2015), add this to your crate root:
extern crate bit_vec;
If you want serde support, include the feature like this:
[dependencies] bit-vec = { version = "0.8", features = ["serde"] }
If you want to use bit-vec in a program that has #![no_std]
, just drop default features:
[dependencies] bit-vec = { version = "0.8", default-features = false }
If you want to use serde with the alloc crate instead of std, just use the serde_no_std
feature:
[dependencies] bit-vec = { version = "0.8", default-features = false, features = ["serde", "serde_no_std"] }
If you want borsh-rs support, include it like this:
[dependencies] bit-vec = { version = "0.8", features = ["borsh"] }
Other available serialization libraries can be enabled with the miniserde
and nanoserde
features.
Dynamic collections implemented with compact bit vectors.
This is a simple example of the Sieve of Eratosthenes which calculates prime numbers up to a given limit.
use bit_vec::BitVec; let max_prime = 10000; // Store the primes as a BitVec let primes = { // Assume all numbers are prime to begin, and then we // cross off non-primes progressively let mut bv = BitVec::from_elem(max_prime, true); // Neither 0 nor 1 are prime bv.set(0, false); bv.set(1, false); for i in 2.. 1 + (max_prime as f64).sqrt() as usize { // if i is a prime if bv[i] { // Mark all multiples of i as non-prime (any multiples below i * i // will have been marked as non-prime previously) for j in i.. { if i * j >= max_prime { break; } bv.set(i * j, false) } } } bv }; // Simple primality tests below our max bound let print_primes = 20; print!("The primes below {} are: ", print_primes); for x in 0..print_primes { if primes.get(x).unwrap_or(false) { print!("{} ", x); } } println!(); let num_primes = primes.iter().filter(|x| *x).count(); println!("There are {} primes below {}", num_primes, max_prime); assert_eq!(num_primes, 1_229);
Dual-licensed for compatibility with the Rust project.
Licensed under the Apache License Version 2.0: http://www.apache.org/licenses/LICENSE-2.0, or the MIT license: http://opensource.org/licenses/MIT, at your option.