3
3
use lapack:: c;
4
4
5
5
use error:: * ;
6
+ use types:: * ;
6
7
use layout:: Layout ;
7
8
use super :: { UPLO , Transpose , into_result} ;
8
9
@@ -18,11 +19,14 @@ pub trait Triangular_: Sized {
18
19
fn solve_triangular ( al : Layout , bl : Layout , UPLO , Diag , a : & [ Self ] , b : & mut [ Self ] ) -> Result < ( ) > ;
19
20
}
20
21
21
- impl Triangular_ for f64 {
22
+ macro_rules! impl_triangular {
23
+ ( $scalar: ty, $trtri: path, $trtrs: path) => {
24
+
25
+ impl Triangular_ for $scalar {
22
26
fn inv_triangular( l: Layout , uplo: UPLO , diag: Diag , a: & mut [ Self ] ) -> Result <( ) > {
23
27
let ( n, _) = l. size( ) ;
24
28
let lda = l. lda( ) ;
25
- let info = c :: dtrtri ( l. lapacke_layout ( ) , uplo as u8 , diag as u8 , n, a, lda) ;
29
+ let info = $trtri ( l. lapacke_layout( ) , uplo as u8 , diag as u8 , n, a, lda) ;
26
30
into_result( info, ( ) )
27
31
}
28
32
@@ -31,16 +35,14 @@ impl Triangular_ for f64 {
31
35
let lda = al. lda( ) ;
32
36
let nrhs = bl. len( ) ;
33
37
let ldb = bl. lda( ) ;
34
- let info = c:: dtrtrs ( al. lapacke_layout ( ) ,
35
- uplo as u8 ,
36
- Transpose :: No as u8 ,
37
- diag as u8 ,
38
- n,
39
- nrhs,
40
- a,
41
- lda,
42
- & mut b,
43
- ldb) ;
38
+ let info = $trtrs( al. lapacke_layout( ) , uplo as u8 , Transpose :: No as u8 , diag as u8 , n, nrhs, a, lda, & mut b, ldb) ;
44
39
into_result( info, ( ) )
45
40
}
46
41
}
42
+
43
+ } } // impl_triangular!
44
+
45
+ impl_triangular ! ( f64 , c:: dtrtri, c:: dtrtrs) ;
46
+ impl_triangular ! ( f32 , c:: strtri, c:: strtrs) ;
47
+ impl_triangular ! ( c64, c:: ztrtri, c:: ztrtrs) ;
48
+ impl_triangular ! ( c32, c:: ctrtri, c:: ctrtrs) ;
0 commit comments