1
- extern crate libc;
2
- extern crate num;
3
-
4
- use self :: libc:: c_int;
5
- use self :: num:: Complex ;
6
1
use crate :: array:: Array ;
7
2
use crate :: data:: { constant, tile, ConstGenerator } ;
8
3
use crate :: defines:: AfError ;
9
4
use crate :: dim4:: Dim4 ;
10
5
use crate :: error:: HANDLE_ERROR ;
11
6
use crate :: num:: Zero ;
12
- use crate :: util:: { AfArray , HasAfEnum , ImplicitPromote , MutAfArray } ;
7
+ use crate :: util:: { af_array, HasAfEnum , ImplicitPromote } ;
8
+ use libc:: c_int;
9
+ use num:: Complex ;
13
10
use std:: ops:: Neg ;
14
11
use std:: ops:: { Add , BitAnd , BitOr , BitXor , Div , Mul , Not , Rem , Shl , Shr , Sub } ;
15
12
16
- #[ allow( dead_code) ]
17
13
extern "C" {
18
- fn af_add ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
19
- fn af_sub ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
20
- fn af_mul ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
21
- fn af_div ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
22
-
23
- fn af_lt ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
24
- fn af_gt ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
25
- fn af_le ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
26
- fn af_ge ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
27
- fn af_eq ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
28
- fn af_or ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
29
-
30
- fn af_neq ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
31
- fn af_and ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
32
- fn af_rem ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
33
- fn af_mod ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
34
-
35
- fn af_bitand ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
36
- fn af_bitor ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
37
- fn af_bitxor ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
38
- fn af_bitshiftl ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
39
- fn af_bitshiftr ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
40
- fn af_minof ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
41
- fn af_maxof ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
42
- fn af_clamp ( out : MutAfArray , inp : AfArray , lo : AfArray , hi : AfArray , batch : c_int ) -> c_int ;
43
-
44
- fn af_not ( out : MutAfArray , arr : AfArray ) -> c_int ;
45
- fn af_abs ( out : MutAfArray , arr : AfArray ) -> c_int ;
46
- fn af_arg ( out : MutAfArray , arr : AfArray ) -> c_int ;
47
- fn af_sign ( out : MutAfArray , arr : AfArray ) -> c_int ;
48
- fn af_ceil ( out : MutAfArray , arr : AfArray ) -> c_int ;
49
- fn af_round ( out : MutAfArray , arr : AfArray ) -> c_int ;
50
- fn af_trunc ( out : MutAfArray , arr : AfArray ) -> c_int ;
51
- fn af_floor ( out : MutAfArray , arr : AfArray ) -> c_int ;
52
-
53
- fn af_hypot ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
54
-
55
- fn af_sin ( out : MutAfArray , arr : AfArray ) -> c_int ;
56
- fn af_cos ( out : MutAfArray , arr : AfArray ) -> c_int ;
57
- fn af_tan ( out : MutAfArray , arr : AfArray ) -> c_int ;
58
- fn af_asin ( out : MutAfArray , arr : AfArray ) -> c_int ;
59
- fn af_acos ( out : MutAfArray , arr : AfArray ) -> c_int ;
60
- fn af_atan ( out : MutAfArray , arr : AfArray ) -> c_int ;
61
-
62
- fn af_atan2 ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
63
- fn af_cplx2 ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
64
- fn af_root ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
65
- fn af_pow ( out : MutAfArray , lhs : AfArray , rhs : AfArray , batch : c_int ) -> c_int ;
66
-
67
- fn af_cplx ( out : MutAfArray , arr : AfArray ) -> c_int ;
68
- fn af_real ( out : MutAfArray , arr : AfArray ) -> c_int ;
69
- fn af_imag ( out : MutAfArray , arr : AfArray ) -> c_int ;
70
- fn af_conjg ( out : MutAfArray , arr : AfArray ) -> c_int ;
71
- fn af_sinh ( out : MutAfArray , arr : AfArray ) -> c_int ;
72
- fn af_cosh ( out : MutAfArray , arr : AfArray ) -> c_int ;
73
- fn af_tanh ( out : MutAfArray , arr : AfArray ) -> c_int ;
74
- fn af_asinh ( out : MutAfArray , arr : AfArray ) -> c_int ;
75
- fn af_acosh ( out : MutAfArray , arr : AfArray ) -> c_int ;
76
- fn af_atanh ( out : MutAfArray , arr : AfArray ) -> c_int ;
77
- fn af_pow2 ( out : MutAfArray , arr : AfArray ) -> c_int ;
78
- fn af_exp ( out : MutAfArray , arr : AfArray ) -> c_int ;
79
- fn af_sigmoid ( out : MutAfArray , arr : AfArray ) -> c_int ;
80
- fn af_expm1 ( out : MutAfArray , arr : AfArray ) -> c_int ;
81
- fn af_erf ( out : MutAfArray , arr : AfArray ) -> c_int ;
82
- fn af_erfc ( out : MutAfArray , arr : AfArray ) -> c_int ;
83
- fn af_log ( out : MutAfArray , arr : AfArray ) -> c_int ;
84
- fn af_log1p ( out : MutAfArray , arr : AfArray ) -> c_int ;
85
- fn af_log10 ( out : MutAfArray , arr : AfArray ) -> c_int ;
86
- fn af_log2 ( out : MutAfArray , arr : AfArray ) -> c_int ;
87
- fn af_sqrt ( out : MutAfArray , arr : AfArray ) -> c_int ;
88
- fn af_rsqrt ( out : MutAfArray , arr : AfArray ) -> c_int ;
89
- fn af_cbrt ( out : MutAfArray , arr : AfArray ) -> c_int ;
90
- fn af_factorial ( out : MutAfArray , arr : AfArray ) -> c_int ;
91
- fn af_tgamma ( out : MutAfArray , arr : AfArray ) -> c_int ;
92
- fn af_lgamma ( out : MutAfArray , arr : AfArray ) -> c_int ;
93
- fn af_iszero ( out : MutAfArray , arr : AfArray ) -> c_int ;
94
- fn af_isinf ( out : MutAfArray , arr : AfArray ) -> c_int ;
95
- fn af_isnan ( out : MutAfArray , arr : AfArray ) -> c_int ;
14
+ fn af_add ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
15
+ fn af_sub ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
16
+ fn af_mul ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
17
+ fn af_div ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
18
+
19
+ fn af_lt ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
20
+ fn af_gt ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
21
+ fn af_le ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
22
+ fn af_ge ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
23
+ fn af_eq ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
24
+ fn af_or ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
25
+
26
+ fn af_neq ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
27
+ fn af_and ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
28
+ fn af_rem ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
29
+ fn af_mod ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
30
+
31
+ fn af_bitand ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
32
+ fn af_bitor ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
33
+ fn af_bitxor ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
34
+ fn af_bitshiftl ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
35
+ fn af_bitshiftr ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
36
+ fn af_minof ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
37
+ fn af_maxof ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
38
+ fn af_clamp (
39
+ out : * mut af_array ,
40
+ inp : af_array ,
41
+ lo : af_array ,
42
+ hi : af_array ,
43
+ batch : bool ,
44
+ ) -> c_int ;
45
+
46
+ fn af_not ( out : * mut af_array , arr : af_array ) -> c_int ;
47
+ fn af_abs ( out : * mut af_array , arr : af_array ) -> c_int ;
48
+ fn af_arg ( out : * mut af_array , arr : af_array ) -> c_int ;
49
+ fn af_sign ( out : * mut af_array , arr : af_array ) -> c_int ;
50
+ fn af_ceil ( out : * mut af_array , arr : af_array ) -> c_int ;
51
+ fn af_round ( out : * mut af_array , arr : af_array ) -> c_int ;
52
+ fn af_trunc ( out : * mut af_array , arr : af_array ) -> c_int ;
53
+ fn af_floor ( out : * mut af_array , arr : af_array ) -> c_int ;
54
+
55
+ fn af_hypot ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
56
+
57
+ fn af_sin ( out : * mut af_array , arr : af_array ) -> c_int ;
58
+ fn af_cos ( out : * mut af_array , arr : af_array ) -> c_int ;
59
+ fn af_tan ( out : * mut af_array , arr : af_array ) -> c_int ;
60
+ fn af_asin ( out : * mut af_array , arr : af_array ) -> c_int ;
61
+ fn af_acos ( out : * mut af_array , arr : af_array ) -> c_int ;
62
+ fn af_atan ( out : * mut af_array , arr : af_array ) -> c_int ;
63
+
64
+ fn af_atan2 ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
65
+ fn af_cplx2 ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
66
+ fn af_root ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
67
+ fn af_pow ( out : * mut af_array , lhs : af_array , rhs : af_array , batch : bool ) -> c_int ;
68
+
69
+ fn af_cplx ( out : * mut af_array , arr : af_array ) -> c_int ;
70
+ fn af_real ( out : * mut af_array , arr : af_array ) -> c_int ;
71
+ fn af_imag ( out : * mut af_array , arr : af_array ) -> c_int ;
72
+ fn af_conjg ( out : * mut af_array , arr : af_array ) -> c_int ;
73
+ fn af_sinh ( out : * mut af_array , arr : af_array ) -> c_int ;
74
+ fn af_cosh ( out : * mut af_array , arr : af_array ) -> c_int ;
75
+ fn af_tanh ( out : * mut af_array , arr : af_array ) -> c_int ;
76
+ fn af_asinh ( out : * mut af_array , arr : af_array ) -> c_int ;
77
+ fn af_acosh ( out : * mut af_array , arr : af_array ) -> c_int ;
78
+ fn af_atanh ( out : * mut af_array , arr : af_array ) -> c_int ;
79
+ fn af_pow2 ( out : * mut af_array , arr : af_array ) -> c_int ;
80
+ fn af_exp ( out : * mut af_array , arr : af_array ) -> c_int ;
81
+ fn af_sigmoid ( out : * mut af_array , arr : af_array ) -> c_int ;
82
+ fn af_expm1 ( out : * mut af_array , arr : af_array ) -> c_int ;
83
+ fn af_erf ( out : * mut af_array , arr : af_array ) -> c_int ;
84
+ fn af_erfc ( out : * mut af_array , arr : af_array ) -> c_int ;
85
+ fn af_log ( out : * mut af_array , arr : af_array ) -> c_int ;
86
+ fn af_log1p ( out : * mut af_array , arr : af_array ) -> c_int ;
87
+ fn af_log10 ( out : * mut af_array , arr : af_array ) -> c_int ;
88
+ fn af_log2 ( out : * mut af_array , arr : af_array ) -> c_int ;
89
+ fn af_sqrt ( out : * mut af_array , arr : af_array ) -> c_int ;
90
+ fn af_rsqrt ( out : * mut af_array , arr : af_array ) -> c_int ;
91
+ fn af_cbrt ( out : * mut af_array , arr : af_array ) -> c_int ;
92
+ fn af_factorial ( out : * mut af_array , arr : af_array ) -> c_int ;
93
+ fn af_tgamma ( out : * mut af_array , arr : af_array ) -> c_int ;
94
+ fn af_lgamma ( out : * mut af_array , arr : af_array ) -> c_int ;
95
+ fn af_iszero ( out : * mut af_array , arr : af_array ) -> c_int ;
96
+ fn af_isinf ( out : * mut af_array , arr : af_array ) -> c_int ;
97
+ fn af_isnan ( out : * mut af_array , arr : af_array ) -> c_int ;
96
98
}
97
99
98
100
/// Enables use of `!` on objects of type [Array](./struct.Array.html)
@@ -103,12 +105,12 @@ where
103
105
type Output = Array < T > ;
104
106
105
107
fn not ( self ) -> Self :: Output {
106
- let mut temp: i64 = 0 ;
107
108
unsafe {
108
- let err_val = af_not ( & mut temp as MutAfArray , self . get ( ) as AfArray ) ;
109
+ let mut temp: af_array = std:: ptr:: null_mut ( ) ;
110
+ let err_val = af_not ( & mut temp as * mut af_array , self . get ( ) ) ;
109
111
HANDLE_ERROR ( AfError :: from ( err_val) ) ;
112
+ temp. into ( )
110
113
}
111
- temp. into ( )
112
114
}
113
115
}
114
116
@@ -117,15 +119,14 @@ macro_rules! unary_func {
117
119
#[ doc=$doc_str]
118
120
///
119
121
/// This is an element wise unary operation.
120
- #[ allow( unused_mut) ]
121
122
pub fn $fn_name<T : HasAfEnum >( input: & Array <T >) -> Array < T :: $out_type >
122
123
where T :: $out_type: HasAfEnum {
123
- let mut temp: i64 = 0 ;
124
124
unsafe {
125
- let err_val = $ffi_fn( & mut temp as MutAfArray , input. get( ) as AfArray ) ;
125
+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
126
+ let err_val = $ffi_fn( & mut temp as * mut af_array, input. get( ) ) ;
126
127
HANDLE_ERROR ( AfError :: from( err_val) ) ;
128
+ temp. into( )
127
129
}
128
- temp. into( )
129
130
}
130
131
)
131
132
}
@@ -251,14 +252,13 @@ macro_rules! unary_boolean_func {
251
252
#[ doc=$doc_str]
252
253
///
253
254
/// This is an element wise unary operation.
254
- #[ allow( unused_mut) ]
255
255
pub fn $fn_name<T : HasAfEnum >( input: & Array <T >) -> Array <bool > {
256
- let mut temp: i64 = 0 ;
257
256
unsafe {
258
- let err_val = $ffi_fn( & mut temp as MutAfArray , input. get( ) as AfArray ) ;
257
+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
258
+ let err_val = $ffi_fn( & mut temp as * mut af_array, input. get( ) ) ;
259
259
HANDLE_ERROR ( AfError :: from( err_val) ) ;
260
+ temp. into( )
260
261
}
261
- temp. into( )
262
262
}
263
263
)
264
264
}
@@ -272,24 +272,20 @@ macro_rules! binary_func {
272
272
#[ doc=$doc_str]
273
273
///
274
274
/// This is an element wise binary operation.
275
- #[ allow( unused_mut) ]
276
275
pub fn $fn_name<A , B >( lhs: & Array <A >, rhs: & Array <B >, batch: bool ) -> Array <A :: Output >
277
276
where
278
277
A : HasAfEnum + ImplicitPromote <B >,
279
278
B : HasAfEnum + ImplicitPromote <A >,
280
279
<A as ImplicitPromote <B >>:: Output : HasAfEnum ,
281
280
{
282
- let mut temp: i64 = 0 ;
283
281
unsafe {
282
+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
284
283
let err_val = $ffi_fn(
285
- & mut temp as MutAfArray ,
286
- lhs. get( ) as AfArray ,
287
- rhs. get( ) as AfArray ,
288
- batch as c_int,
284
+ & mut temp as * mut af_array, lhs. get( ) , rhs. get( ) , batch,
289
285
) ;
290
286
HANDLE_ERROR ( AfError :: from( err_val) ) ;
287
+ Into :: <Array <A :: Output >>:: into( temp)
291
288
}
292
- Into :: <Array <A :: Output >>:: into( temp)
293
289
}
294
290
} ;
295
291
}
@@ -410,17 +406,14 @@ macro_rules! overloaded_binary_func {
410
406
B : HasAfEnum + ImplicitPromote <A >,
411
407
<A as ImplicitPromote <B >>:: Output : HasAfEnum ,
412
408
{
413
- let mut temp: i64 = 0 ;
414
409
unsafe {
410
+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
415
411
let err_val = $ffi_name(
416
- & mut temp as MutAfArray ,
417
- lhs. get( ) as AfArray ,
418
- rhs. get( ) as AfArray ,
419
- batch as c_int,
412
+ & mut temp as * mut af_array, lhs. get( ) , rhs. get( ) , batch,
420
413
) ;
421
414
HANDLE_ERROR ( AfError :: from( err_val) ) ;
415
+ temp. into( )
422
416
}
423
- temp. into( )
424
417
}
425
418
426
419
#[ doc=$doc_str]
@@ -510,17 +503,14 @@ macro_rules! overloaded_compare_func {
510
503
A : HasAfEnum + ImplicitPromote <B >,
511
504
B : HasAfEnum + ImplicitPromote <A >,
512
505
{
513
- let mut temp: i64 = 0 ;
514
506
unsafe {
507
+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
515
508
let err_val = $ffi_name(
516
- & mut temp as MutAfArray ,
517
- lhs. get( ) as AfArray ,
518
- rhs. get( ) as AfArray ,
519
- batch as c_int,
509
+ & mut temp as * mut af_array, lhs. get( ) , rhs. get( ) , batch,
520
510
) ;
521
511
HANDLE_ERROR ( AfError :: from( err_val) ) ;
512
+ temp. into( )
522
513
}
523
- temp. into( )
524
514
}
525
515
526
516
#[ doc=$doc_str]
@@ -612,18 +602,18 @@ where
612
602
Y : HasAfEnum + ImplicitPromote < X > ,
613
603
<X as ImplicitPromote < Y > >:: Output : HasAfEnum ,
614
604
{
615
- let mut temp: i64 = 0 ;
616
605
unsafe {
606
+ let mut temp: af_array = std:: ptr:: null_mut ( ) ;
617
607
let err_val = af_clamp (
618
- & mut temp as MutAfArray ,
619
- inp. get ( ) as AfArray ,
620
- lo. get ( ) as AfArray ,
621
- hi. get ( ) as AfArray ,
622
- batch as c_int ,
608
+ & mut temp as * mut af_array ,
609
+ inp. get ( ) ,
610
+ lo. get ( ) ,
611
+ hi. get ( ) ,
612
+ batch,
623
613
) ;
624
614
HANDLE_ERROR ( AfError :: from ( err_val) ) ;
615
+ temp. into ( )
625
616
}
626
- temp. into ( )
627
617
}
628
618
629
619
/// Clamp the values of Array
0 commit comments