bit-vec

A Vec of Bits

Latest version: 0.8.0 registry icon
Maintenance score
73
Safety score
100
Popularity score
77
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.8.0 0 0 0 0 0
0.7.0 0 0 0 0 0
0.6.3 0 0 0 0 0
0.6.2 0 0 0 0 0
0.6.1 0 0 0 0 0
0.6.0 0 0 0 0 0
0.5.1 0 0 0 0 0
0.5.0 0 0 0 0 0
0.4.4 0 0 0 0 0
0.4.3 0 0 0 0 0
0.4.2 0 0 0 0 0
0.4.1 0 0 0 0 0
0.4.0 0 0 0 0 0
0.3.0 0 0 0 0 0
0.2.0 0 0 0 0 0
0.1.5 0 0 0 0 0
0.1.4 0 0 0 0 0
0.1.3 0 0 0 0 0
0.1.1 0 0 0 0 0
0.1.0 0 0 0 0 0

Stability
Latest release:

0.8.0 - This version is safe to use because it has no known security vulnerabilities at this time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

Apache-2.0   -   Apache License 2.0

Not a wildcard

Not proprietary

OSI Compliant


MIT   -   MIT License

Not a wildcard

Not proprietary

OSI Compliant



bit-vec

A compact vector of bits.

crates.io Documentation Rust CI MSRV

Dependency Status Download Status

Usage

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.

Description

Dynamic collections implemented with compact 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);

License

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.