Skip to main content

bit_matrix/
lib.rs

1//! Implements bit matrices.
2//!
3//! # Examples
4//!
5//! Gets a mutable reference to the square bit matrix within this
6//! rectangular matrix, then performs a transitive closure.
7//!
8//! ```rust
9//! use bit_matrix::BitMatrix;
10//!
11//! let mut matrix = <BitMatrix>::new(7, 5);
12//! matrix.set(1, 2, true);
13//! matrix.set(2, 3, true);
14//! matrix.set(3, 4, true);
15//!
16//! {
17//!     let mut sub_matrix = matrix.sub_matrix_mut(1 .. 6);
18//!     sub_matrix.transitive_closure();
19//! }
20//! assert!(matrix[(1, 4)]);
21//!
22//! matrix.reflexive_closure();
23//! assert!(matrix[(0, 0)]);
24//! assert!(matrix[(1, 1)]);
25//! assert!(matrix[(2, 2)]);
26//! assert!(matrix[(3, 3)]);
27//! ```
28//!
29//! This simple example calculates the transitive closure of 4x4 bit matrix.
30//!
31//! ```rust
32//! use bit_matrix::BitMatrix;
33//!
34//! let mut matrix = <BitMatrix>::new(4, 4);
35//! let points = &[
36//!     (0, 0),
37//!     (0, 1),
38//!     (0, 3),
39//!     (1, 0),
40//!     (1, 2),
41//!     (2, 0),
42//!     (2, 1),
43//!     (3, 1),
44//!     (3, 3),
45//! ];
46//! for &(i, j) in points {
47//!     matrix.set(i, j, true);
48//! }
49//! matrix.transitive_closure();
50//!
51//! let mut expected_matrix = BitMatrix::new(4, 4);
52//! for i in 0..4 {
53//!     for j in 0..4 {
54//!         expected_matrix.set(i, j, true);
55//!     }
56//! }
57//!
58//! assert_eq!(matrix, expected_matrix);
59//! ```
60
61#![deny(
62    missing_docs,
63    missing_copy_implementations,
64    trivial_casts,
65    trivial_numeric_casts,
66    unused_import_braces,
67    unused_qualifications
68)]
69#![cfg_attr(test, deny(warnings))]
70#![no_std]
71#![deny(clippy::shadow_reuse)]
72#![deny(clippy::shadow_same)]
73#![deny(clippy::shadow_unrelated)]
74#![warn(clippy::multiple_inherent_impl)]
75#![warn(clippy::multiple_crate_versions)]
76#![warn(clippy::single_match)]
77#![warn(clippy::missing_safety_doc)]
78
79mod matrix;
80mod row;
81mod submatrix;
82mod util;
83
84pub use matrix::BitMatrix;
85
86pub(crate) mod local_prelude {
87    pub use crate::row::BitSlice;
88    pub use crate::submatrix::{BitSubMatrix, BitSubMatrixMut};
89    pub use crate::util::{FALSE, TRUE};
90    pub use bit_vec::{BitBlock, BitVec};
91}