Fenix
@develop
Loading...
Searching...
No Matches
status.hpp
1
#ifndef FENIX_MPIXX_STATUS_HPP
2
#define FENIX_MPIXX_STATUS_HPP
3
4
#include <mpi.h>
5
#include <tuple>
6
7
namespace
fenix::mpixx {
8
class
Status
{
9
public
:
10
int
return_value = MPI_SUCCESS;
11
MPI_Status status;
12
13
Status
() =
default
;
14
Status
(
int
r) : return_value(r) {}
15
auto
operator=(
int
r) {
16
return_value = r;
17
return
*
this
;
18
}
19
20
operator
bool()
const
{
return
return_value == MPI_SUCCESS; }
21
22
operator
int()
const
{
return
return_value; }
23
bool
operator==(
int
r)
const
{
return
return_value == r; }
24
25
operator
MPI_Status()
const
{
return
status; }
26
operator
MPI_Status*() {
return
&status; }
27
28
// to support structured unbinding
29
template
<
size_t
I>
30
auto
&& get() && {
31
if
constexpr
(I == 0)
return
std::move(return_value);
32
if
constexpr
(I == 1)
return
std::move(status);
33
}
34
};
35
}
// namespace fenix::mpixx
36
37
// Supporting structured unbinding for Status
38
namespace
std {
39
template
<>
40
struct
tuple_size<fenix::mpixx::Status> : std::integral_constant<size_t, 2> {};
41
42
template
<>
43
struct
tuple_element<0, fenix::mpixx::Status> {
44
using
type = int;
45
};
46
template
<>
47
struct
tuple_element<1, fenix::mpixx::Status> {
48
using
type = MPI_Status;
49
};
50
}
// namespace std
51
52
#endif
// FENIX_MPIXX_STATUS_HPP
fenix::mpixx::Status
Definition
status.hpp:8
include
fenix
mpixx
status.hpp
Generated by
1.12.0