4 releases (2 breaking)
0.3.0 | Mar 21, 2025 |
---|---|
0.2.1 | Mar 30, 2021 |
0.2.0 | Mar 30, 2021 |
0.1.0 | Mar 30, 2021 |
#313 in Rust patterns
7,377 downloads per month
Used in 2 crates
(via rs2glsl-macros)
8KB
103 lines
cartesian-rs
A macro for combining iterators to the cartesian product. Using the macro it is possible to write code compacter, and use less indention space.
Writing one for-loop and iterating through the cartesian product of multiple iterators
is similar to nesting for loops, in each loop iterating through one of the iterators.
However, the semantics of break
is changed.
Example
let (m, n, p) = (3, 3, 1);
let mut id = vec![vec![0; n]; m];
for (i, j) in cartesian!(0..m, 0..n) {
id[i][j] = (i == j) as u32;
}
let col_vec = vec![vec![1], vec![2], vec![4]];
let mut res = vec![vec![0; p]; m];
for (i, j, k) in cartesian!(0..m, 0..n, 0..p) {
res[i][k] += id[i][j] * col_vec[j][k];
}
assert_eq!(col_vec, res);
License
This package is licensed under the MIT license.