@@ -27,6 +27,32 @@ extern {
2727
2828 fn af_get_numdims ( result : * mut c_uint , arr : AfArray ) -> c_int ;
2929
30+ fn af_is_empty ( result : * mut c_int , arr : AfArray ) -> c_int ;
31+
32+ fn af_is_scalar ( result : * mut c_int , arr : AfArray ) -> c_int ;
33+
34+ fn af_is_row ( result : * mut c_int , arr : AfArray ) -> c_int ;
35+
36+ fn af_is_column ( result : * mut c_int , arr : AfArray ) -> c_int ;
37+
38+ fn af_is_vector ( result : * mut c_int , arr : AfArray ) -> c_int ;
39+
40+ fn af_is_complex ( result : * mut c_int , arr : AfArray ) -> c_int ;
41+
42+ fn af_is_real ( result : * mut c_int , arr : AfArray ) -> c_int ;
43+
44+ fn af_is_double ( result : * mut c_int , arr : AfArray ) -> c_int ;
45+
46+ fn af_is_single ( result : * mut c_int , arr : AfArray ) -> c_int ;
47+
48+ fn af_is_realfloating ( result : * mut c_int , arr : AfArray ) -> c_int ;
49+
50+ fn af_is_floating ( result : * mut c_int , arr : AfArray ) -> c_int ;
51+
52+ fn af_is_integer ( result : * mut c_int , arr : AfArray ) -> c_int ;
53+
54+ fn af_is_bool ( result : * mut c_int , arr : AfArray ) -> c_int ;
55+
3056 fn af_get_data_ptr ( data : * mut c_void , arr : AfArray ) -> c_int ;
3157
3258 fn af_eval ( arr : AfArray ) -> c_int ;
@@ -36,34 +62,42 @@ extern {
3662 fn af_print_array ( arr : AfArray ) -> c_int ;
3763}
3864
65+ macro_rules! is_func {
66+ ( $fn_name: ident, $ffi_fn: ident) => (
67+ pub fn $fn_name( & self ) -> bool {
68+ unsafe {
69+ let mut ret_val: i32 = 0 ;
70+ $ffi_fn( & mut ret_val as * mut c_int, self . handle as AfArray ) ;
71+ ret_val > 0
72+ }
73+ }
74+ )
75+ }
76+
3977impl Array {
4078 #[ allow( unused_mut) ]
4179 pub fn new < T > ( dims : Dim4 , slice : & [ T ] , aftype : Aftype ) -> Array {
4280 unsafe {
4381 let mut temp: i64 = 0 ;
44- af_create_array ( & mut temp as * mut c_longlong ,
45- slice. as_ptr ( ) as * const c_void ,
46- dims. ndims ( ) as c_uint ,
47- dims. get ( ) . as_ptr ( ) as * const c_longlong ,
48- get_ffi_type ( aftype. clone ( ) ) as c_int ) ;
49- Array { handle : temp }
82+ af_create_array ( & mut temp as MutAfArray , slice. as_ptr ( ) as * const c_void ,
83+ dims. ndims ( ) as c_uint , dims. get ( ) . as_ptr ( ) as * const c_longlong ,
84+ get_ffi_type ( aftype) as c_int ) ;
85+ Array { handle : temp}
5086 }
5187 }
5288
5389 pub fn elements ( & self ) -> i64 {
5490 unsafe {
5591 let mut ret_val: i64 = 0 ;
56- af_get_elements ( & mut ret_val as * mut c_longlong ,
57- self . handle as c_longlong ) ;
92+ af_get_elements ( & mut ret_val as MutAfArray , self . handle as AfArray ) ;
5893 ret_val
5994 }
6095 }
6196
6297 pub fn get_type ( & self ) -> Aftype {
6398 unsafe {
6499 let mut ret_val: i32 = 0 ;
65- af_get_type ( & mut ret_val as * mut c_int ,
66- self . handle as c_longlong ) ;
100+ af_get_type ( & mut ret_val as * mut c_int , self . handle as AfArray ) ;
67101 get_af_type ( ret_val)
68102 }
69103 }
@@ -74,20 +108,17 @@ impl Array {
74108 let mut ret1: i64 = 0 ;
75109 let mut ret2: i64 = 0 ;
76110 let mut ret3: i64 = 0 ;
77- af_get_dims ( & mut ret0 as * mut c_longlong ,
78- & mut ret1 as * mut c_longlong ,
79- & mut ret2 as * mut c_longlong ,
80- & mut ret3 as * mut c_longlong ,
81- self . handle as c_longlong ) ;
82- Dim4 { dims : [ ret0 as u64 , ret1 as u64 , ret2 as u64 , ret3 as u64 ] }
111+ af_get_dims ( & mut ret0 as * mut c_longlong , & mut ret1 as * mut c_longlong ,
112+ & mut ret2 as * mut c_longlong , & mut ret3 as * mut c_longlong ,
113+ self . handle as AfArray ) ;
114+ Dim4 { dims : [ ret0 as u64 , ret1 as u64 , ret2 as u64 , ret3 as u64 ] }
83115 }
84116 }
85117
86118 pub fn numdims ( & self ) -> u32 {
87119 unsafe {
88120 let mut ret_val: u32 = 0 ;
89- af_get_numdims ( & mut ret_val as * mut c_uint ,
90- self . handle as c_longlong ) ;
121+ af_get_numdims ( & mut ret_val as * mut c_uint , self . handle as AfArray ) ;
91122 ret_val
92123 }
93124 }
@@ -98,16 +129,28 @@ impl Array {
98129
99130 pub fn host ( & self , data : & mut [ f64 ] ) {
100131 unsafe {
101- af_get_data_ptr ( data. as_mut_ptr ( ) as * mut c_void ,
102- self . handle as c_longlong ) ;
132+ af_get_data_ptr ( data. as_mut_ptr ( ) as * mut c_void , self . handle as AfArray ) ;
103133 }
104134 }
105135
106136 pub fn eval ( & self ) {
107137 unsafe {
108- af_eval ( self . handle as c_longlong ) ;
138+ af_eval ( self . handle as AfArray ) ;
109139 }
110140 }
141+
142+ is_func ! ( is_empty, af_is_empty) ;
143+ is_func ! ( is_scalar, af_is_scalar) ;
144+ is_func ! ( is_row, af_is_row) ;
145+ is_func ! ( is_column, af_is_column) ;
146+ is_func ! ( is_vector, af_is_vector) ;
147+ is_func ! ( is_complex, af_is_complex) ;
148+ is_func ! ( is_double, af_is_double) ;
149+ is_func ! ( is_single, af_is_single) ;
150+ is_func ! ( is_real, af_is_real) ;
151+ is_func ! ( is_floating, af_is_floating) ;
152+ is_func ! ( is_integer, af_is_integer) ;
153+ is_func ! ( is_bool, af_is_bool) ;
111154}
112155
113156impl Drop for Array {
0 commit comments