sparse-bin-mat 0.7.0

A sparse implementation of a binary matrix optimized for row operations
Documentation
pub(crate) fn initialize_from(
    rows: Vec<Vec<usize>>,
    capacity: Option<usize>,
) -> (Vec<usize>, Vec<usize>) {
    let mut row_ranges = init_row_ranges(&rows);
    let mut column_indices = init_column_indices(&rows, capacity);
    for row in rows {
        add_row(row, &mut row_ranges, &mut column_indices);
    }
    (row_ranges, column_indices)
}

fn init_column_indices(rows: &[Vec<usize>], capacity: Option<usize>) -> Vec<usize> {
    let capacity = match capacity {
        Some(cap) => cap,
        None => rows.iter().map(|row| row.len()).sum(),
    };
    Vec::with_capacity(capacity)
}

fn init_row_ranges(rows: &[Vec<usize>]) -> Vec<usize> {
    let mut row_ranges = Vec::with_capacity(rows.len() + 1);
    row_ranges.push(0);
    row_ranges
}

fn add_row(mut row: Vec<usize>, row_ranges: &mut Vec<usize>, column_indices: &mut Vec<usize>) {
    let elements_before = column_indices.len();
    row_ranges.push(elements_before + row.len());
    column_indices.append(&mut row);
}