14 template<
typename T1,
typename T2>
15 MPI_Datatype SGetType::operator()(
const pair<T1,T2>& P)
18 MPI_Aint addr_first,addr_second;
21 int blocklen[2]={1,1};
23 MPI_Address((
void*)&P.first,&addr_first);
24 MPI_Address((
void*)&P.second,&addr_second);
26 disp[1]=addr_second-addr_first;
27 type[0]=GetType(P.first);
28 type[1]=GetType(P.second);
37 template<
typename T1,
typename T2,
typename T3>
45 int blocklen[3]={1,1,1};
47 MPI_Address(static_cast<void *>(&(P.template get<0>())), &(addr[0]));
48 MPI_Address(static_cast<void *>(&(P.template get<1>())), &(addr[1]));
49 MPI_Address(static_cast<void *>(&(P.template get<2>())), &(addr[2]));
51 disp[1]=addr[1]-addr[0];
52 disp[2]=addr[2]-addr[0];
53 type[0]=GetType(P.template get<0>());
54 type[1]=GetType(P.template get<1>());
55 type[2]=GetType(P.template get<2>());
64 template<
typename T1,
typename T2,
typename T3,
typename T4>
72 int blocklen[4]={1,1,1,1};
74 MPI_Address(static_cast<void *>(&(P.template get<0>())), &(addr[0]));
75 MPI_Address(static_cast<void *>(&(P.template get<1>())), &(addr[1]));
76 MPI_Address(static_cast<void *>(&(P.template get<2>())), &(addr[2]));
77 MPI_Address(static_cast<void *>(&(P.template get<3>())), &(addr[3]));
79 disp[1]=addr[1]-addr[0];
80 disp[2]=addr[2]-addr[0];
81 disp[3]=addr[3]-addr[0];
82 type[0]=GetType(P.template get<0>());
83 type[1]=GetType(P.template get<1>());
84 type[2]=GetType(P.template get<2>());
85 type[3]=GetType(P.template get<3>());
94 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
101 MPI_Datatype type[5];
102 int blocklen[5]={1,1,1,1,1};
104 MPI_Address(static_cast<void *>(&(P.template get<0>())), &(addr[0]));
105 MPI_Address(static_cast<void *>(&(P.template get<1>())), &(addr[1]));
106 MPI_Address(static_cast<void *>(&(P.template get<2>())), &(addr[2]));
107 MPI_Address(static_cast<void *>(&(P.template get<3>())), &(addr[3]));
108 MPI_Address(static_cast<void *>(&(P.template get<4>())), &(addr[4]));
110 disp[1]=addr[1]-addr[0];
111 disp[2]=addr[2]-addr[0];
112 disp[3]=addr[3]-addr[0];
113 disp[4]=addr[4]-addr[0];
114 type[0]=GetType(P.template get<0>());
115 type[1]=GetType(P.template get<1>());
116 type[2]=GetType(P.template get<2>());
117 type[3]=GetType(P.template get<3>());
118 type[4]=GetType(P.template get<4>());