/// Rotate a square matrix clock-wise a number of times.
///
/// # Panics
///
/// This function panics if the matrix is not square.
Rotate a square matrix clock-wise a number of times.
Rotate a square matrix clock - wise a number of times .
pub fn rotate_cw(&mut self, times: usize) {
        assert!(
            self.rows == self.columns,
            "attempt to rotate a non-square matrix"
        );
        match times % 4 {
            0 => (),
            2 => self.data.reverse(),
            n => {
                for r in 0..self.rows / 2 {
                    for c in 0..(self.columns + 1) / 2 {
                        // i1 … i2
                        // …  …  …
                        // i4 … i3
                        let i1 = r * self.columns + c;
                        let i2 = c * self.columns + self.columns - 1 - r;
                        let i3 = (self.rows - 1 - r) * self.columns + self.columns - 1 - c;
                        let i4 = (self.rows - 1 - c) * self.columns + r;
                        if n == 1 {
                            // i1 … i2      i4 … i1
                            // …  …  …  =>  …  …  …
                            // i4 … i3      i3 … i2
                            self.data.swap(i1, i2);
                            self.data.swap(i1, i4);
                            self.data.swap(i3, i4);
                        } else {
                            // i1 … i2      i2 … i3
                            // …  …  …  =>  …  …  …
                            // i4 … i3      i1 … i4
                            self.data.swap(i3, i4);
                            self.data.swap(i1, i4);
                            self.data.swap(i1, i2);
                        }
                    }
                }
            }
        }
    }
pub fn rotate_cw ( & mut self , times : usize ) { assert ! ( self rows self columns " " ) ; match times % 4 { 0 => ( ) , 2 => self . data . reverse ( ) , n => { for r in 0 .. self . rows / 2 { for c in 0 .. ( self . columns + 1 ) / 2 { // i1 … i2 // …  …  … // i4 … i3 let i1 = r * self . columns + c ; let i2 = c * self . columns + self . columns - 1 - r ; let i3 = ( self . rows - 1 - r ) * self . columns + self . columns - 1 - c ; let i4 = ( self . rows - 1 - c ) * self . columns + r ; if n == 1 { // i1 … i2      i4 … i1 // …  …  …  =>  …  …  … // i4 … i3      i3 … i2 self . data . swap ( i1 , i2 ) ; self . data . swap ( i1 , i4 ) ; self . data . swap ( i3 , i4 ) ; } else { // i1 … i2      i2 … i3 // …  …  …  =>  …  …  … // i4 … i3      i1 … i4 self . data . swap ( i3 , i4 ) ; self . data . swap ( i1 , i4 ) ; self . data . swap ( i1 , i2 ) ; } } } } } }
Rotate a square matrix clock-wise a number of times.
Rotate a square matrix clock - wise a number of times .
&mut self
times
usize
panics
This function panics if the matrix is not square.
This function panics if the matrix is not square .