1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::Scalar;
use cblas::{Layout, Part, Transpose, ssyrk, dsyrk, csyrk, zsyrk};
use num_complex::Complex32 as c32;
use num_complex::Complex64 as c64;

pub trait Tsyrk : Scalar {
    unsafe fn syrk(layout: Layout,
            uplo: Part,
            trans: Transpose,
            n: i32,
            k: i32,
            alpha: Self,
            a: &[Self],
            lda: i32,
            beta: Self,
            c: &mut [Self],
            ldc: i32,
    );
}

macro_rules! impl_tsyrk{
    ($N: ty, $tsyrk: path) => (
        impl Tsyrk for $N{
            unsafe fn syrk(
                layout: Layout,
                uplo: Part,
                trans: Transpose,
                n: i32,
                k: i32,
                alpha: Self,
                a: &[Self],
                lda: i32,
                beta: Self,
                c: &mut [Self],
                ldc: i32
            )
            {
                $tsyrk(layout, uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
            }
        }
    )
}

impl_tsyrk!(f32, ssyrk);
impl_tsyrk!(f64, dsyrk);
impl_tsyrk!(c32, csyrk);
impl_tsyrk!(c64, zsyrk);