source: src/comm/mpi/has_request_vec.hpp@ b7b317

Last change on this file since b7b317 was f003a9, checked in by Julian Iseringhausen <isering@…>, 14 years ago

Refactored vmg in order to separate the core library and the particle simulation part properly.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@1798 5161e1c8-67bf-11de-9fd5-51895aff932f

  • Property mode set to 100644
File size: 1.1 KB
Line 
1/**
2 * @file has_request_vec.hpp
3 * @author Julian Iseringhausen <isering@ins.uni-bonn.de>
4 * @date Mon Nov 21 13:27:22 2011
5 *
6 * @brief A convenience base class for classes using MPI_Requests.
7 *
8 */
9
10
11#ifndef HAS_REQUEST_VEC_HPP_
12#define HAS_REQUEST_VEC_HPP_
13
14#include <vector>
15
16#ifdef HAVE_MPI
17
18namespace VMG
19{
20
21class HasRequestVec
22{
23protected:
24
25MPI_Request& Request()
26{
27 request_vec.push_back(MPI_Request());
28 return request_vec.back();
29}
30
31void WaitAll()
32{
33 if (!request_vec.empty()) {
34#ifndef NDEBUG
35 int rval = MPI_Waitall(static_cast<int>(request_vec.size()), &request_vec.front(), MPI_STATUSES_IGNORE);
36 assert(rval == MPI_SUCCESS);
37#else
38 MPI_Waitall(static_cast<int>(request_vec.size()), &request_vec.front(), MPI_STATUSES_IGNORE);
39#endif
40 request_vec.clear();
41 }
42}
43
44int TestAll()
45{
46 int flag = 1;
47 if (!request_vec.empty())
48 MPI_Testall(request_vec.size(), &request_vec.front(), &flag, MPI_STATUSES_IGNORE);
49 return flag;
50}
51
52size_t RequestsPending()
53{
54 return request_vec.size();
55}
56
57private:
58 std::vector<MPI_Request> request_vec;
59};
60
61}
62
63#endif /* HAVE_MPI */
64
65#endif /* HAS_REQUEST_VEC_HPP_ */
Note: See TracBrowser for help on using the repository browser.