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 
Status()58   Status() : mpi_status() { }
59   // copy
Status(const Status & data)60   Status(const Status& data) : mpi_status(data.mpi_status) { }
61 
Status(const MPI_Status & i)62   Status(const MPI_Status &i) : mpi_status(i) { }
63 
~Status()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; }
MPI_Status()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 };
116