Inverse of [`encode`].
(idx: u64, n: usize, bits: u32)
| 26 | |
| 27 | /// Inverse of [`encode`]. |
| 28 | pub fn decode(idx: u64, n: usize, bits: u32) -> ArrayResult<Vec<u64>> { |
| 29 | check_shape(n, bits)?; |
| 30 | let mut out = vec![0u64; n]; |
| 31 | for b in (0..bits).rev() { |
| 32 | for (i, slot) in out.iter_mut().enumerate().take(n) { |
| 33 | let shift = b * n as u32 + (n as u32 - 1 - i as u32); |
| 34 | let bit = (idx >> shift) & 1; |
| 35 | *slot = (*slot << 1) | bit; |
| 36 | } |
| 37 | } |
| 38 | Ok(out) |
| 39 | } |
| 40 | |
| 41 | fn check_shape(n: usize, bits: u32) -> ArrayResult<()> { |
| 42 | if n > MAX_DIMS { |