1- extern crate libc;
2- extern crate num;
3-
4- use self :: libc:: c_int;
5- use self :: num:: Complex ;
61use crate :: array:: Array ;
72use crate :: data:: { constant, tile, ConstGenerator } ;
83use crate :: defines:: AfError ;
94use crate :: dim4:: Dim4 ;
105use crate :: error:: HANDLE_ERROR ;
116use 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 ;
1310use std:: ops:: Neg ;
1411use std:: ops:: { Add , BitAnd , BitOr , BitXor , Div , Mul , Not , Rem , Shl , Shr , Sub } ;
1512
16- #[ allow( dead_code) ]
1713extern "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 ;
9698}
9799
98100/// Enables use of `!` on objects of type [Array](./struct.Array.html)
@@ -103,12 +105,12 @@ where
103105 type Output = Array < T > ;
104106
105107 fn not ( self ) -> Self :: Output {
106- let mut temp: i64 = 0 ;
107108 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 ( ) ) ;
109111 HANDLE_ERROR ( AfError :: from ( err_val) ) ;
112+ temp. into ( )
110113 }
111- temp. into ( )
112114 }
113115}
114116
@@ -117,15 +119,14 @@ macro_rules! unary_func {
117119 #[ doc=$doc_str]
118120 ///
119121 /// This is an element wise unary operation.
120- #[ allow( unused_mut) ]
121122 pub fn $fn_name<T : HasAfEnum >( input: & Array <T >) -> Array < T :: $out_type >
122123 where T :: $out_type: HasAfEnum {
123- let mut temp: i64 = 0 ;
124124 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( ) ) ;
126127 HANDLE_ERROR ( AfError :: from( err_val) ) ;
128+ temp. into( )
127129 }
128- temp. into( )
129130 }
130131 )
131132}
@@ -251,14 +252,13 @@ macro_rules! unary_boolean_func {
251252 #[ doc=$doc_str]
252253 ///
253254 /// This is an element wise unary operation.
254- #[ allow( unused_mut) ]
255255 pub fn $fn_name<T : HasAfEnum >( input: & Array <T >) -> Array <bool > {
256- let mut temp: i64 = 0 ;
257256 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( ) ) ;
259259 HANDLE_ERROR ( AfError :: from( err_val) ) ;
260+ temp. into( )
260261 }
261- temp. into( )
262262 }
263263 )
264264}
@@ -272,24 +272,20 @@ macro_rules! binary_func {
272272 #[ doc=$doc_str]
273273 ///
274274 /// This is an element wise binary operation.
275- #[ allow( unused_mut) ]
276275 pub fn $fn_name<A , B >( lhs: & Array <A >, rhs: & Array <B >, batch: bool ) -> Array <A :: Output >
277276 where
278277 A : HasAfEnum + ImplicitPromote <B >,
279278 B : HasAfEnum + ImplicitPromote <A >,
280279 <A as ImplicitPromote <B >>:: Output : HasAfEnum ,
281280 {
282- let mut temp: i64 = 0 ;
283281 unsafe {
282+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
284283 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,
289285 ) ;
290286 HANDLE_ERROR ( AfError :: from( err_val) ) ;
287+ Into :: <Array <A :: Output >>:: into( temp)
291288 }
292- Into :: <Array <A :: Output >>:: into( temp)
293289 }
294290 } ;
295291}
@@ -410,17 +406,14 @@ macro_rules! overloaded_binary_func {
410406 B : HasAfEnum + ImplicitPromote <A >,
411407 <A as ImplicitPromote <B >>:: Output : HasAfEnum ,
412408 {
413- let mut temp: i64 = 0 ;
414409 unsafe {
410+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
415411 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,
420413 ) ;
421414 HANDLE_ERROR ( AfError :: from( err_val) ) ;
415+ temp. into( )
422416 }
423- temp. into( )
424417 }
425418
426419 #[ doc=$doc_str]
@@ -510,17 +503,14 @@ macro_rules! overloaded_compare_func {
510503 A : HasAfEnum + ImplicitPromote <B >,
511504 B : HasAfEnum + ImplicitPromote <A >,
512505 {
513- let mut temp: i64 = 0 ;
514506 unsafe {
507+ let mut temp: af_array = std:: ptr:: null_mut( ) ;
515508 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,
520510 ) ;
521511 HANDLE_ERROR ( AfError :: from( err_val) ) ;
512+ temp. into( )
522513 }
523- temp. into( )
524514 }
525515
526516 #[ doc=$doc_str]
@@ -612,18 +602,18 @@ where
612602 Y : HasAfEnum + ImplicitPromote < X > ,
613603 <X as ImplicitPromote < Y > >:: Output : HasAfEnum ,
614604{
615- let mut temp: i64 = 0 ;
616605 unsafe {
606+ let mut temp: af_array = std:: ptr:: null_mut ( ) ;
617607 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,
623613 ) ;
624614 HANDLE_ERROR ( AfError :: from ( err_val) ) ;
615+ temp. into ( )
625616 }
626- temp. into ( )
627617}
628618
629619/// Clamp the values of Array
0 commit comments