1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 class Intracomm : public Comm {
  22 public:
  23 
  24   
  25   Intracomm() { }
  26   
  27   Intracomm(const Comm_Null& data) : Comm(data) { }
  28   
  29 
  30 #if 0 
  31   
  32   
  33   
  34   
  35   
  36   
  37   Intracomm(const Intracomm& data) : Comm(data), pmpi_comm(data) { }
  38 
  39   Intracomm(MPI_Comm data) : Comm(data), pmpi_comm(data) { }
  40 
  41   Intracomm(const PMPI::Intracomm& data)
  42     : Comm((const PMPI::Comm&)data), pmpi_comm(data) { }
  43 
  44   
  45   Intracomm& operator=(const Intracomm& data) {
  46     Comm::operator=(data);
  47     pmpi_comm = data.pmpi_comm;
  48     return *this;
  49   }
  50   Intracomm& operator=(const Comm_Null& data) {
  51     Comm::operator=(data);
  52     pmpi_comm = (PMPI::Intracomm)data; return *this;
  53   }
  54   
  55   Intracomm& operator=(const MPI_Comm& data) {
  56     Comm::operator=(data);
  57     pmpi_comm = data;
  58     return *this;
  59   }
  60 
  61 #else
  62   Intracomm(const Intracomm& data) : Comm(data.mpi_comm) { }
  63 
  64   inline Intracomm(MPI_Comm data);
  65 
  66   
  67   Intracomm& operator=(const Intracomm& data) {
  68     mpi_comm = data.mpi_comm; return *this;
  69   }
  70 
  71   Intracomm& operator=(const Comm_Null& data) {
  72     mpi_comm = data; return *this;
  73   }
  74 
  75   
  76   Intracomm& operator=(const MPI_Comm& data) {
  77     mpi_comm = data; return *this; }
  78 
  79 #endif
  80 
  81   
  82   
  83   
  84   
  85   
  86   
  87   virtual void
  88   Scan(const void *sendbuf, void *recvbuf, int count,
  89        const Datatype & datatype, const Op & op) const;
  90 
  91   virtual void
  92   Exscan(const void *sendbuf, void *recvbuf, int count,
  93          const Datatype & datatype, const Op & op) const;
  94 
  95   
  96   
  97   
  98 
  99   Intracomm Dup() const;
 100 
 101   virtual Intracomm& Clone() const;
 102 
 103   virtual Intracomm
 104   Create(const Group& group) const;
 105 
 106   virtual Intracomm
 107   Split(int color, int key) const;
 108 
 109   virtual Intercomm
 110   Create_intercomm(int local_leader, const Comm& peer_comm,
 111                    int remote_leader, int tag) const;
 112 
 113   virtual Cartcomm
 114   Create_cart(int ndims, const int dims[],
 115               const bool periods[], bool reorder) const;
 116 
 117   virtual Graphcomm
 118   Create_graph(int nnodes, const int index[],
 119                const int edges[], bool reorder) const;
 120 
 121 
 122   
 123   
 124   
 125 
 126   virtual Intercomm Accept(const char* port_name, const Info& info, int root)
 127     const;
 128 
 129   virtual Intercomm Connect(const char* port_name, const Info& info, int root)
 130     const;
 131 
 132   virtual Intercomm Spawn(const char* command, const char* argv[],
 133                           int maxprocs, const Info& info, int root) const;
 134 
 135   virtual Intercomm Spawn(const char* command, const char* argv[],
 136                           int maxprocs, const Info& info,
 137                           int root, int array_of_errcodes[]) const;
 138 
 139   virtual Intercomm Spawn_multiple(int count, const char* array_of_commands[],
 140                                    const char** array_of_argv[],
 141                                    const int array_of_maxprocs[],
 142                                    const Info array_of_info[], int root);
 143 
 144   virtual Intercomm Spawn_multiple(int count, const char* array_of_commands[],
 145                                    const char** array_of_argv[],
 146                                    const int array_of_maxprocs[],
 147                                    const Info array_of_info[], int root,
 148                                    int array_of_errcodes[]);
 149 
 150 
 151   
 152   
 153   
 154 protected:
 155 
 156 
 157 #if 0 
 158   PMPI::Intracomm pmpi_comm;
 159 #endif
 160 
 161   
 162   
 163   
 164   static inline MPI_Info *convert_info_to_mpi_info(int p_nbr,
 165                                                    const Info p_info_tbl[]);
 166 };