@@ -2,12 +2,13 @@ extern crate libc;
2
2
3
3
use defines:: AfError ;
4
4
use error:: HANDLE_ERROR ;
5
- use self :: libc:: { c_int, size_t, c_char} ;
5
+ use self :: libc:: { c_int, size_t, c_char, c_void } ;
6
6
use std:: ffi:: CString ;
7
7
8
8
extern {
9
9
fn af_get_version ( major : * mut c_int , minor : * mut c_int , patch : * mut c_int ) -> c_int ;
10
10
fn af_info ( ) -> c_int ;
11
+ fn af_info_string ( str : * mut * mut c_char , verbose : bool ) -> c_int ;
11
12
fn af_init ( ) -> c_int ;
12
13
fn af_get_device_count ( nDevices : * mut c_int ) -> c_int ;
13
14
fn af_get_dbl_support ( available : * mut c_int , device : c_int ) -> c_int ;
@@ -20,6 +21,8 @@ extern {
20
21
fn af_get_mem_step_size ( step_bytes : * mut size_t ) -> c_int ;
21
22
fn af_device_gc ( ) -> c_int ;
22
23
fn af_sync ( device : c_int ) -> c_int ;
24
+
25
+ fn af_free_host ( ptr : * mut c_void ) -> c_int ;
23
26
}
24
27
25
28
/// Get ArrayFire Version Number
@@ -56,6 +59,31 @@ pub fn info() {
56
59
}
57
60
}
58
61
62
+ /// Return library meta-info as `String`
63
+ ///
64
+ /// # Examples
65
+ ///
66
+ /// An example output of `af::info_string` call looks like below
67
+ ///
68
+ /// ```text
69
+ /// ArrayFire v3.0.0 (CUDA, 64-bit Mac OSX, build d8d4b38)
70
+ /// Platform: CUDA Toolkit 7, Driver: CUDA Driver Version: 7000
71
+ /// [0] GeForce GT 750M, 2048 MB, CUDA Compute 3.0
72
+ /// ```
73
+ pub fn info_string ( verbose : bool ) -> String {
74
+ let mut tmp: * mut c_char = 0 as * mut c_char ;
75
+ unsafe {
76
+ let err_val = af_info_string ( & mut tmp, verbose) ;
77
+ HANDLE_ERROR ( AfError :: from ( err_val) ) ;
78
+
79
+ let result = CString :: from_raw ( tmp) . into_string ( ) . unwrap ( ) ;
80
+
81
+ let err_val = af_free_host ( tmp as * mut c_void ) ;
82
+ HANDLE_ERROR ( AfError :: from ( err_val) ) ;
83
+ result
84
+ }
85
+ }
86
+
59
87
/// Initialize ArrayFire library
60
88
///
61
89
/// 0th device will be the default device unless init call
0 commit comments