Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
 }