@@ -46,31 +46,19 @@ where
46
46
}
47
47
}
48
48
49
- fn uninitialized < A , S > ( l : MatrixLayout ) -> ArrayBase < S , Ix2 >
50
- where
51
- A : Copy ,
52
- S : DataOwned < Elem = A > ,
53
- {
54
- match l {
55
- MatrixLayout :: C { row, lda } => unsafe {
56
- ArrayBase :: uninitialized ( ( row as usize , lda as usize ) )
57
- } ,
58
- MatrixLayout :: F { col, lda } => unsafe {
59
- ArrayBase :: uninitialized ( ( lda as usize , col as usize ) . f ( ) )
60
- } ,
61
- }
62
- }
63
-
64
49
pub fn replicate < A , Sv , So , D > ( a : & ArrayBase < Sv , D > ) -> ArrayBase < So , D >
65
50
where
66
51
A : Copy ,
67
52
Sv : Data < Elem = A > ,
68
53
So : DataOwned < Elem = A > + DataMut ,
69
54
D : Dimension ,
70
55
{
71
- let mut b = unsafe { ArrayBase :: uninitialized ( a. dim ( ) ) } ;
72
- b. assign ( a) ;
73
- b
56
+ unsafe {
57
+ let ret = ArrayBase :: < So , D > :: build_uninit ( a. dim ( ) , |view| {
58
+ a. assign_to ( view) ;
59
+ } ) ;
60
+ ret. assume_init ( )
61
+ }
74
62
}
75
63
76
64
fn clone_with_layout < A , Si , So > ( l : MatrixLayout , a : & ArrayBase < Si , Ix2 > ) -> ArrayBase < So , Ix2 >
79
67
Si : Data < Elem = A > ,
80
68
So : DataOwned < Elem = A > + DataMut ,
81
69
{
82
- let mut b = uninitialized ( l) ;
83
- b. assign ( a) ;
84
- b
70
+ let shape_builder = match l {
71
+ MatrixLayout :: C { row, lda } => ( row as usize , lda as usize ) . set_f ( false ) ,
72
+ MatrixLayout :: F { col, lda } => ( lda as usize , col as usize ) . set_f ( true ) ,
73
+ } ;
74
+ unsafe {
75
+ let ret = ArrayBase :: < So , _ > :: build_uninit ( shape_builder, |view| {
76
+ a. assign_to ( view) ;
77
+ } ) ;
78
+ ret. assume_init ( )
79
+ }
85
80
}
86
81
87
82
pub fn transpose_data < A , S > ( a : & mut ArrayBase < S , Ix2 > ) -> Result < & mut ArrayBase < S , Ix2 > >
0 commit comments