Skip to content

Commit e51cad4

Browse files
committed
Fix C FFI pointer types
1 parent 9b4230d commit e51cad4

File tree

21 files changed

+2165
-2463
lines changed

21 files changed

+2165
-2463
lines changed

src/algorithm/mod.rs

Lines changed: 179 additions & 217 deletions
Large diffs are not rendered by default.

src/arith/mod.rs

Lines changed: 112 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,100 @@
1-
extern crate libc;
2-
extern crate num;
3-
4-
use self::libc::c_int;
5-
use self::num::Complex;
61
use crate::array::Array;
72
use crate::data::{constant, tile, ConstGenerator};
83
use crate::defines::AfError;
94
use crate::dim4::Dim4;
105
use crate::error::HANDLE_ERROR;
116
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;
1310
use std::ops::Neg;
1411
use std::ops::{Add, BitAnd, BitOr, BitXor, Div, Mul, Not, Rem, Shl, Shr, Sub};
1512

16-
#[allow(dead_code)]
1713
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;
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

Comments
 (0)