/// <summary> /// Wait for at least one request to complete, then return a list of /// all of the requests that have completed at this point. /// </summary> /// <returns> /// A list of all of the requests that have completed, which /// will contain at least one element. /// </returns> public List <Request> WaitSome() { if (requests.Count == 0) { throw new ArgumentException("Cannot call MPI.RequestList.WaitAny with an empty request list"); } List <Request> result = new List <Request>(); while (result.Count == 0) { int n = requests.Count; for (int i = 0; i < n; ++i) { Request req = requests[i]; if (req.Test() != null) { requests.RemoveAt(i); --i; --n; result.Add(req); } } } return(result); }
/// <summary> /// Determines whether any request has completed. If so, that request will be removed /// from the request list and returned. /// </summary> /// <returns> /// The first request that has completed, if any. Otherwise, returns <c>null</c> to /// indicate that no request has completed. /// </returns> public Request TestAny() { int n = requests.Count; for (int i = 0; i < n; ++i) { Request req = requests[i]; if (req.Test() != null) { requests.RemoveAt(i); return(req); } } return(null); }
/// <summary> /// Return a list of all requests that have completed. /// </summary> /// <returns> /// A list of all of the requests that have completed. If /// no requests have completed, returns <c>null</c>. /// </returns> public List <Request> TestSome() { List <Request> result = null; int n = requests.Count; for (int i = 0; i < n; ++i) { Request req = requests[i]; if (req.Test() != null) { requests.RemoveAt(i); --i; --n; if (result == null) { result = new List <Request>(); } result.Add(req); } } return(result); }
/// <summary> /// Determine whether this non-blocking operation has completed. /// </summary> /// <returns> /// If the non-blocking operation has completed, returns information /// about the completed communication operation. Otherwise, returns /// <c>null</c> to indicate that the operation has not completed. /// </returns> public CompletedStatus Test() { MPI.CompletedStatus internal_status = internal_request.Test(); return(internal_status != null?CompletedStatus.createStatus(internal_status, source) : null); }