1 // -*- c++ -*-
2 //
3 // Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
4 // University Research and Technology
5 // Corporation. All rights reserved.
6 // Copyright (c) 2004-2005 The University of Tennessee and The University
7 // of Tennessee Research Foundation. All rights
8 // reserved.
9 // Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
10 // University of Stuttgart. All rights reserved.
11 // Copyright (c) 2004-2005 The Regents of the University of California.
12 // All rights reserved.
13 // Copyright (c) 2006-2008 Cisco Systems, Inc. All rights reserved.
14 // Copyright (c) 2017 Research Organization for Information Science
15 // and Technology (RIST). All rights reserved.
16 // $COPYRIGHT$
17 //
18 // Additional copyrights may follow
19 //
20 // $HEADER$
21 //
22
23
24 class Status {
25 #if 0 /* OMPI_ENABLE_MPI_PROFILING */
26 // friend class PMPI::Status;
27 #endif
28 friend class MPI::Comm; //so I can access pmpi_status data member in comm.cc
29 friend class MPI::Request; //and also from request.cc
30 friend class MPI::File;
31
32 public:
33 #if 0 /* OMPI_ENABLE_MPI_PROFILING */
34
35 // construction / destruction
36 Status() { }
37 virtual ~Status() {}
38
39 // copy / assignment
40 Status(const Status& data) : pmpi_status(data.pmpi_status) { }
41
42 Status(const MPI_Status &i) : pmpi_status(i) { }
43
44 Status& operator=(const Status& data) {
45 pmpi_status = data.pmpi_status; return *this; }
46
47 // comparison, don't need for status
48
49 // inter-language operability
50 Status& operator= (const MPI_Status &i) {
51 pmpi_status = i; return *this; }
52 operator MPI_Status () const { return pmpi_status; }
53 // operator MPI_Status* () const { return pmpi_status; }
54 operator const PMPI::Status&() const { return pmpi_status; }
55
56 #else
57
58 Status() : mpi_status() { }
59 // copy
60 Status(const Status& data) : mpi_status(data.mpi_status) { }
61
62 Status(const MPI_Status &i) : mpi_status(i) { }
63
64 virtual ~Status() {}
65
66 Status& operator=(const Status& data) {
67 mpi_status = data.mpi_status; return *this; }
68
69 // comparison, don't need for status
70
71 // inter-language operability
72 Status& operator= (const MPI_Status &i) {
73 mpi_status = i; return *this; }
74 operator MPI_Status () const { return mpi_status; }
75 // operator MPI_Status* () const { return (MPI_Status*)&mpi_status; }
76
77 #endif
78
79 //
80 // Point-to-Point Communication
81 //
82
83 virtual int Get_count(const Datatype& datatype) const;
84
85 virtual bool Is_cancelled() const;
86
87 virtual int Get_elements(const Datatype& datatype) const;
88
89 //
90 // Status Access
91 //
92 virtual int Get_source() const;
93
94 virtual void Set_source(int source);
95
96 virtual int Get_tag() const;
97
98 virtual void Set_tag(int tag);
99
100 virtual int Get_error() const;
101
102 virtual void Set_error(int error);
103
104 virtual void Set_elements(const MPI::Datatype& datatype, int count);
105
106 virtual void Set_cancelled(bool flag);
107
108 protected:
109 #if 0 /* OMPI_ENABLE_MPI_PROFILING */
110 PMPI::Status pmpi_status;
111 #else
112 MPI_Status mpi_status;
113 #endif
114
115 };