16 releases

0.6.1 Jun 1, 2019
0.5.1 Mar 21, 2019
0.5.0 Apr 23, 2018
0.4.4 May 30, 2017
0.4.0 Jul 10, 2015

#6 in Data structures

Download history 39241/week @ 2019-12-17 20595/week @ 2019-12-24 27205/week @ 2019-12-31 42592/week @ 2020-01-07 39527/week @ 2020-01-14 46505/week @ 2020-01-21 49638/week @ 2020-01-28 41959/week @ 2020-02-04 35321/week @ 2020-02-11 34656/week @ 2020-02-18 38818/week @ 2020-02-25 40523/week @ 2020-03-03 42090/week @ 2020-03-10 45227/week @ 2020-03-17 46449/week @ 2020-03-24 42473/week @ 2020-03-31

148,063 downloads per month
Used in 868 crates (89 directly)

MIT/Apache

69KB
1.5K SLoC

A Vec of bits.

Documentation is available at https://contain-rs.github.io/bit-vec/bit_vec.

Build Status crates.io

Usage

Add this to your Cargo.toml:

[dependencies]
bit-vec = "0.6"

and this to your crate root:

extern crate bit_vec;

If you want serde support, include the feature like this:

[dependencies]
bit-vec = { version = "0.6", 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.6", default-features = false }

lib.rs:

Collections implemented with bit vectors.

Examples

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);

Dependencies

~190KB