46 struct type_info_compare
48 bool operator()(std::type_info
const* lhs, std::type_info
const* rhs)
const 50 return lhs->before(*rhs);
58 typedef std::map<std::type_info const*,MPI_Datatype,type_info_compare> stored_map_type;
65 MPI_Finalized(&is_finalized);
69 for (stored_map_type::iterator it=map.begin(); it != map.end(); ++it)
71 MPI_Type_free(&(it->second));
79 MPI_Datatype
get(
const std::type_info* t)
81 stored_map_type::iterator pos = map.find(t);
85 return MPI_DATATYPE_NULL;
88 void set(
const std::type_info* t, MPI_Datatype datatype)
105 template <
typename T>
108 std::type_info
const* t = &
typeid(T);
109 MPI_Datatype datatype = mpidtc.
get(t);
111 if (datatype == MPI_DATATYPE_NULL)
113 MPI_Type_contiguous(
sizeof(T), MPI_CHAR, &datatype );
114 MPI_Type_commit(&datatype);
116 MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
117 mpidtc.
set(t, datatype);
bool operator()(std::type_info const *lhs, std::type_info const *rhs) const
MPI_Datatype MPIType< int64_t >(void)
MPI_Datatype MPIType< uint64_t >(void)
MPI_Datatype MPIType< unsigned short int >(void)
void set(const std::type_info *t, MPI_Datatype datatype)
MPI_Datatype MPIType< int32_t >(void)
MPI_Datatype MPIType< float >(void)
MPI_Datatype MPIType< unsigned char >(void)
MPI_Datatype MPIType< double >(void)
MPI_Datatype MPIType(void)
MPI_Datatype MPIType< signed short int >(void)
MPI_Datatype MPIType< uint32_t >(void)
MPI_Datatype get(const std::type_info *t)
MPI_Datatype MPIType< bool >(void)
MPI_Datatype MPIType< long double >(void)
MPI_Datatype MPIType< signed char >(void)