1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use core::mem::MaybeUninit;

pub const fn idiv(lhs: isize, rhs: isize) -> isize {
    assert!(lhs % rhs == 0);
    lhs / rhs
}

pub const fn transpose_arrays<T: Copy, const R: usize, const C: usize>(
    array: [[T; C]; R],
) -> [[T; R]; C] {
    let mut result = MaybeUninit::uninit_array();
    let mut i = 0;
    while i < C {
        let mut row = MaybeUninit::uninit_array();
        let mut j = 0;
        while j < R {
            row[j] = MaybeUninit::new(array[j][i]);
            j += 1;
        }
        result[i] = row.transpose();
        i += 1;
    }
    unsafe { result.transpose().assume_init() }
}