/* * @file: communicatorgroup.hh * @uthor: Jordan P. Lefebvre, lefebvrejp@ornl.gov * * Created on July 3, 2013, 12:48 PM */ #ifndef RADIX_RADIXPARA_COMMUNICATORGROUP_HH_ #define RADIX_RADIXPARA_COMMUNICATORGROUP_HH_ #include #include "radixcore/visibility.hh" #ifdef USE_MPI #include #endif namespace radix { namespace Private { #ifdef USE_MPI /** * @class MPICommGroup * @brief MPI implementation of CommunicatorGroup */ class RADIX_PUBLIC MPICommGroup { public: MPICommGroup(); MPICommGroup(MPI_Group group); virtual ~MPICommGroup(); /** * @brief rank of group * @return int */ virtual int rank() const; /** * @brief size of group * @return int */ virtual int size() const; private: MPI_Group group; }; // class MPICommGroup #endif /** ifdef USE_MPI **/ /** * @class SerialCommGroup * @brief Serial implementation of CommGroup */ class RADIX_PUBLIC SerialCommGroup { public: SerialCommGroup(); virtual ~SerialCommGroup(); /** * @brief rank of group * @return int */ virtual int rank() const; /** * @brief size of group * @return int */ virtual int size() const; private: }; // class SerialCommGroup } // namespace Private /** * @class CommunicatorGroup * @brief Simply pure interface to describe communicator group */ #ifdef USE_MPI template #else template #endif class RADIX_PUBLIC CommunicatorGroupImpl : public GroupImpl { public: /** * Default constructor */ CommunicatorGroupImpl(); /** * Copy constructor */ CommunicatorGroupImpl(const GroupImpl &orig); /** * Default destructor */ virtual ~CommunicatorGroupImpl(); private: }; typedef CommunicatorGroupImpl<> CommunicatorGroup; } // namespace radix // // Include template implementations // #include "radixpara/communicatorgroup.i.hh" #endif /* RADIX_RADIXPARA_COMMUNICATORGROUP_HH_ */