1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use bindings::{ompi_request_t, MPI_Request, MPI_Status, MPI_Request_get_status};
use bindings::{MPI_Wait};
use error::{Error, MPI_SUCCESS};
use status;
pub fn new() -> MPI_Request {
&mut ompi_request_t
}
pub fn get_status(req: MPI_Request) -> Option<MPI_Status> {
let mut flag: i32 = 0;
let mut status = status::new();
let _ = unsafe { MPI_Request_get_status(req, &mut flag, &mut status) };
match flag {
0 => None,
_ => Some(status)
}
}
pub fn wait(mut req: MPI_Request) -> Result<Option<MPI_Status>, Error> {
let mut stat = status::new();
let err = unsafe { MPI_Wait(&mut req, &mut stat) };
match err {
MPI_SUCCESS => Ok(Some(stat)),
_ => Err(Error::new(err))
}
}