Skip to content

Commit c5c9ba7

Browse files
committed
Merge pull request #16 from 9prady9/other_headers
Other headers
2 parents b70d060 + 75bd6e7 commit c5c9ba7

File tree

14 files changed

+1375
-134
lines changed

14 files changed

+1375
-134
lines changed

src/algorithm/mod.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
extern crate libc;
22

3-
use super::Array as Array;
3+
use array::Array;
44
use self::libc::{c_int, c_uint};
55

66
type MutAfArray = *mut self::libc::c_longlong;
@@ -51,7 +51,7 @@ pub fn sum(input: &Array, dim: i32) -> Array {
5151
unsafe {
5252
let mut temp: i64 = 0;
5353
af_sum(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
54-
Array {handle: temp}
54+
Array::from(temp)
5555
}
5656
}
5757

@@ -69,7 +69,7 @@ pub fn product(input: &Array, dim: i32) -> Array {
6969
unsafe {
7070
let mut temp: i64 = 0;
7171
af_product(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
72-
Array {handle: temp}
72+
Array::from(temp)
7373
}
7474
}
7575

@@ -87,7 +87,7 @@ pub fn min(input: &Array, dim: i32) -> Array {
8787
unsafe {
8888
let mut temp: i64 = 0;
8989
af_min(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
90-
Array {handle: temp}
90+
Array::from(temp)
9191
}
9292
}
9393

@@ -96,7 +96,7 @@ pub fn max(input: &Array, dim: i32) -> Array {
9696
unsafe {
9797
let mut temp: i64 = 0;
9898
af_max(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
99-
Array {handle: temp}
99+
Array::from(temp)
100100
}
101101
}
102102

@@ -105,7 +105,7 @@ pub fn all_true(input: &Array, dim: i32) -> Array {
105105
unsafe {
106106
let mut temp: i64 = 0;
107107
af_all_true(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
108-
Array {handle: temp}
108+
Array::from(temp)
109109
}
110110
}
111111

@@ -114,7 +114,7 @@ pub fn any_true(input: &Array, dim: i32) -> Array {
114114
unsafe {
115115
let mut temp: i64 = 0;
116116
af_any_true(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
117-
Array {handle: temp}
117+
Array::from(temp)
118118
}
119119
}
120120

@@ -123,7 +123,7 @@ pub fn count(input: &Array, dim: i32) -> Array {
123123
unsafe {
124124
let mut temp: i64 = 0;
125125
af_count(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
126-
Array {handle: temp}
126+
Array::from(temp)
127127
}
128128
}
129129

@@ -230,7 +230,7 @@ pub fn imin(input: &Array, dim: i32) -> (Array, Array) {
230230
let mut idx: i64 = 0;
231231
af_imin(&mut temp as MutAfArray, &mut idx as MutAfArray,
232232
input.get() as AfArray, dim as c_int);
233-
(Array{handle: temp}, Array{handle: idx})
233+
(Array::from(temp), Array::from(idx))
234234
}
235235
}
236236

@@ -241,7 +241,7 @@ pub fn imax(input: &Array, dim: i32) -> (Array, Array) {
241241
let mut idx: i64 = 0;
242242
af_imax(&mut temp as MutAfArray, &mut idx as MutAfArray,
243243
input.get() as AfArray, dim as c_int);
244-
(Array{handle: temp}, Array{handle: idx})
244+
(Array::from(temp), Array::from(idx))
245245
}
246246
}
247247

@@ -274,7 +274,7 @@ pub fn accum(input: &Array, dim: i32) -> Array {
274274
unsafe {
275275
let mut temp: i64 = 0;
276276
af_accum(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
277-
Array {handle: temp}
277+
Array::from(temp)
278278
}
279279
}
280280

@@ -283,7 +283,7 @@ pub fn locate(input: &Array) -> Array {
283283
unsafe {
284284
let mut temp: i64 = 0;
285285
af_where(&mut temp as MutAfArray, input.get() as AfArray);
286-
Array {handle: temp}
286+
Array::from(temp)
287287
}
288288
}
289289

@@ -292,7 +292,7 @@ pub fn diff1(input: &Array, dim: i32) -> Array {
292292
unsafe {
293293
let mut temp: i64 = 0;
294294
af_diff1(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
295-
Array {handle: temp}
295+
Array::from(temp)
296296
}
297297
}
298298

@@ -301,7 +301,7 @@ pub fn diff2(input: &Array, dim: i32) -> Array {
301301
unsafe {
302302
let mut temp: i64 = 0;
303303
af_diff2(&mut temp as MutAfArray, input.get() as AfArray, dim as c_int);
304-
Array {handle: temp}
304+
Array::from(temp)
305305
}
306306
}
307307

@@ -311,7 +311,7 @@ pub fn sort(input: &Array, dim: u32, ascending: bool) -> Array {
311311
let mut temp: i64 = 0;
312312
af_sort(&mut temp as MutAfArray, input.get() as AfArray,
313313
dim as c_uint, ascending as c_int);
314-
Array{handle: temp}
314+
Array::from(temp)
315315
}
316316
}
317317

@@ -323,7 +323,7 @@ pub fn sort_index(input: &Array, dim: u32, ascending: bool) -> (Array, Array) {
323323
af_sort_index(&mut temp as MutAfArray, &mut idx as MutAfArray,
324324
input.get() as AfArray,
325325
dim as c_uint, ascending as c_int);
326-
(Array {handle: temp}, Array {handle: idx})
326+
(Array::from(temp), Array::from(idx))
327327
}
328328
}
329329

@@ -335,7 +335,7 @@ pub fn sort_by_key(keys: &Array, vals: &Array, dim: u32, ascending: bool) -> (Ar
335335
af_sort_by_key(&mut temp as MutAfArray, &mut temp2 as MutAfArray,
336336
keys.get() as AfArray, vals.get() as AfArray,
337337
dim as c_uint, ascending as c_int);
338-
(Array {handle: temp}, Array {handle: temp2})
338+
(Array::from(temp), Array::from(temp2))
339339
}
340340
}
341341

@@ -344,7 +344,7 @@ pub fn set_unique(input: &Array, is_sorted: bool) -> Array {
344344
unsafe {
345345
let mut temp: i64 = 0;
346346
af_set_unique(&mut temp as MutAfArray, input.get() as AfArray, is_sorted as c_int);
347-
Array{handle: temp}
347+
Array::from(temp)
348348
}
349349
}
350350

@@ -354,7 +354,7 @@ pub fn set_union(first: &Array, second: &Array, is_unique: bool) -> Array {
354354
let mut temp: i64 = 0;
355355
af_set_union(&mut temp as MutAfArray, first.get() as AfArray,
356356
second.get() as AfArray, is_unique as c_int);
357-
Array{handle: temp}
357+
Array::from(temp)
358358
}
359359
}
360360

@@ -364,6 +364,6 @@ pub fn set_intersect(first: &Array, second: &Array, is_unique: bool) -> Array {
364364
let mut temp: i64 = 0;
365365
af_set_intersect(&mut temp as MutAfArray, first.get() as AfArray,
366366
second.get() as AfArray, is_unique as c_int);
367-
Array{handle: temp}
367+
Array::from(temp)
368368
}
369369
}

src/arith/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
extern crate libc;
22
extern crate num;
33

4-
use super::Array as Array;
4+
use array::Array;
55
use self::libc::{c_int};
66
use data::constant;
77
use self::num::Complex;
@@ -99,7 +99,7 @@ impl<'f> Not for &'f Array {
9999
unsafe {
100100
let mut temp: i64 = 0;
101101
af_not(&mut temp as MutAfArray, self.get() as AfArray);
102-
Array {handle: temp}
102+
Array::from(temp)
103103
}
104104
}
105105
}
@@ -111,7 +111,7 @@ macro_rules! unary_func {
111111
unsafe {
112112
let mut temp: i64 = 0;
113113
$ffi_fn(&mut temp as MutAfArray, input.get() as AfArray);
114-
Array {handle: temp}
114+
Array::from(temp)
115115
}
116116
}
117117
)
@@ -165,7 +165,7 @@ macro_rules! binary_func {
165165
unsafe {
166166
let mut temp: i64 = 0;
167167
$ffi_fn(&mut temp as MutAfArray, lhs.get() as AfArray, rhs.get() as AfArray, 0);
168-
Array {handle: temp}
168+
Array::from(temp)
169169
}
170170
}
171171
)
@@ -200,7 +200,7 @@ macro_rules! arith_scalar_func {
200200
$ffi_fn(&mut temp as MutAfArray,
201201
self.get() as AfArray, cnst_arr.get() as AfArray,
202202
0);
203-
Array {handle: temp}
203+
Array::from(temp)
204204
}
205205
}
206206
}
@@ -237,7 +237,7 @@ macro_rules! arith_func {
237237
$ffi_fn(&mut temp as MutAfArray,
238238
self.get() as AfArray, rhs.get() as AfArray,
239239
0);
240-
Array {handle: temp}
240+
Array::from(temp)
241241
}
242242
}
243243
}

src/array.rs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
extern crate libc;
22

3-
use super::Array as Array;
4-
use super::Dim4 as Dim4;
5-
use super::Aftype as Aftype;
6-
use util::get_ffi_type;
7-
use util::get_af_type;
8-
use self::libc::{c_void, c_int, c_uint, c_longlong};
3+
use dim4::Dim4;
4+
use defines::Aftype;
5+
use self::libc::{uint8_t, c_void, c_int, c_uint, c_longlong};
96

107
type MutAfArray = *mut self::libc::c_longlong;
118
type MutDouble = *mut self::libc::c_double;
@@ -16,11 +13,11 @@ type DimT = self::libc::c_longlong;
1613
#[allow(dead_code)]
1714
extern {
1815
fn af_create_array(out: MutAfArray, data: *const c_void,
19-
ndims: c_uint, dims: *const DimT, aftype: c_int) -> c_int;
16+
ndims: c_uint, dims: *const DimT, aftype: uint8_t) -> c_int;
2017

2118
fn af_get_elements(out: MutAfArray, arr: AfArray) -> c_int;
2219

23-
fn af_get_type(out: *mut c_int, arr: AfArray) -> c_int;
20+
fn af_get_type(out: *mut uint8_t, arr: AfArray) -> c_int;
2421

2522
fn af_get_dims(dim0: *mut c_longlong, dim1: *mut c_longlong, dim2: *mut c_longlong,
2623
dim3: *mut c_longlong, arr: AfArray) -> c_int;
@@ -64,6 +61,10 @@ extern {
6461
fn af_print_array(arr: AfArray) -> c_int;
6562
}
6663

64+
pub struct Array {
65+
handle: i64,
66+
}
67+
6768
macro_rules! is_func {
6869
($fn_name: ident, $ffi_fn: ident) => (
6970
pub fn $fn_name(&self) -> bool {
@@ -83,7 +84,7 @@ impl Array {
8384
let mut temp: i64 = 0;
8485
af_create_array(&mut temp as MutAfArray, slice.as_ptr() as *const c_void,
8586
dims.ndims() as c_uint, dims.get().as_ptr() as * const c_longlong,
86-
get_ffi_type(aftype) as c_int);
87+
aftype as uint8_t);
8788
Array {handle: temp}
8889
}
8990
}
@@ -98,9 +99,9 @@ impl Array {
9899

99100
pub fn get_type(&self) -> Aftype {
100101
unsafe {
101-
let mut ret_val: i32 = 0;
102-
af_get_type(&mut ret_val as *mut c_int, self.handle as AfArray);
103-
get_af_type(ret_val)
102+
let mut ret_val: u8 = 0;
103+
af_get_type(&mut ret_val as *mut uint8_t, self.handle as AfArray);
104+
Aftype::from(ret_val)
104105
}
105106
}
106107

@@ -113,7 +114,7 @@ impl Array {
113114
af_get_dims(&mut ret0 as *mut c_longlong, &mut ret1 as *mut c_longlong,
114115
&mut ret2 as *mut c_longlong, &mut ret3 as *mut c_longlong,
115116
self.handle as AfArray);
116-
Dim4 {dims: [ret0 as u64, ret1 as u64, ret2 as u64, ret3 as u64]}
117+
Dim4::new(&[ret0 as u64, ret1 as u64, ret2 as u64, ret3 as u64])
117118
}
118119
}
119120

@@ -155,6 +156,12 @@ impl Array {
155156
is_func!(is_bool, af_is_bool);
156157
}
157158

159+
impl From<i64> for Array {
160+
fn from(t: i64) -> Array {
161+
Array {handle: t}
162+
}
163+
}
164+
158165
impl Clone for Array {
159166
fn clone(&self) -> Array {
160167
unsafe {
@@ -175,6 +182,6 @@ impl Drop for Array {
175182

176183
pub fn print(input: &Array) {
177184
unsafe {
178-
af_print_array(input.get() as c_longlong);
185+
af_print_array(input.get() as AfArray);
179186
}
180187
}

src/blas/mod.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
extern crate libc;
2+
3+
use array::Array;
4+
use defines::MatProp;
5+
use self::libc::{c_uint, c_int};
6+
use util::to_u32;
7+
8+
type MutAfArray = *mut self::libc::c_longlong;
9+
type AfArray = self::libc::c_longlong;
10+
11+
#[allow(dead_code)]
12+
extern {
13+
fn af_matmul(out: MutAfArray, lhs: AfArray, rhs: AfArray,
14+
optlhs: c_uint, optrhs: c_uint) -> c_int;
15+
16+
fn af_dot(out: MutAfArray, lhs: AfArray, rhs: AfArray,
17+
optlhs: c_uint, optrhs: c_uint) -> c_int;
18+
19+
fn af_transpose(out: MutAfArray, arr: AfArray, conjugate: c_int) -> c_int;
20+
fn af_transpose_inplace(arr: AfArray, conjugate: c_int) -> c_int;
21+
}
22+
23+
#[allow(unused_mut)]
24+
pub fn matmul(lhs: &Array, rhs: &Array, optlhs: MatProp, optrhs: MatProp) -> Array {
25+
unsafe {
26+
let mut temp: i64 = 0;
27+
af_matmul(&mut temp as MutAfArray, lhs.get() as AfArray, rhs.get() as AfArray,
28+
to_u32(optlhs) as c_uint, to_u32(optrhs) as c_uint);
29+
Array::from(temp)
30+
}
31+
}
32+
33+
#[allow(unused_mut)]
34+
pub fn dot(lhs: &Array, rhs: &Array, optlhs: MatProp, optrhs: MatProp) -> Array {
35+
unsafe {
36+
let mut temp: i64 = 0;
37+
af_dot(&mut temp as MutAfArray, lhs.get() as AfArray, rhs.get() as AfArray,
38+
to_u32(optlhs) as c_uint, to_u32(optrhs) as c_uint);
39+
Array::from(temp)
40+
}
41+
}
42+
43+
#[allow(unused_mut)]
44+
pub fn transpose(arr: &Array, conjugate: bool) -> Array {
45+
unsafe {
46+
let mut temp: i64 = 0;
47+
af_transpose(&mut temp as MutAfArray, arr.get() as AfArray, conjugate as c_int);
48+
Array::from(temp)
49+
}
50+
}
51+
52+
#[allow(unused_mut)]
53+
pub fn transpose_inplace(arr: &Array, conjugate: bool) {
54+
unsafe {
55+
af_transpose_inplace(arr.get() as AfArray, conjugate as c_int);
56+
}
57+
}

0 commit comments

Comments
 (0)