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 crate::Matrix;
use core::{
mem::{self, MaybeUninit},
ptr,
};
impl<T, const M: usize, const N: usize> Matrix<T, M, N> {
pub fn transpose(self) -> Matrix<T, N, M> {
let mut s = unsafe { ptr::read(&self as *const _ as *const Matrix<MaybeUninit<T>, M, N>) };
mem::forget(self);
let mut d = Matrix::<T, N, M>::uninit();
for i in 0..M {
for j in 0..N {
unsafe {
mem::swap(d.get_unchecked_mut(j, i), s.get_unchecked_mut(i, j));
}
}
}
unsafe { d.assume_init() }
}
}