ESyS-Particle  4.0.1
gettype.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __GETTYPE_H
14 #define __GETTYPE_H
15 
16 //--- MPI ---
17 #include <mpi.h>
18 
19 //--- STL includes ---
20 #include <utility>
21 
22 #include <Foundation/triplet.h>
23 #include <Foundation/quadtuple.h>
24 #include <Foundation/quintuple.h>
25 
26 using std::pair;
27 
33 class SGetType
34 {
35  public:
36  template <typename T> MPI_Datatype operator()(const T &);
37 
38  template<typename T1,typename T2>
39  MPI_Datatype operator()(const pair<T1,T2>&);
40 
41  template<typename T1, typename T2, typename T3>
42  MPI_Datatype operator()(const esys::lsm::triplet<T1,T2,T3> &trip);
43 
44  template<typename T1, typename T2, typename T3, typename T4>
45  MPI_Datatype operator()(const esys::lsm::quadtuple<T1,T2,T3,T4> &quad);
46 
47  template<typename T1, typename T2, typename T3, typename T4, typename T5>
48  MPI_Datatype operator()(const esys::lsm::quintuple<T1,T2,T3,T4,T5> &quin);
49 };
50 
54 template<typename T1,typename T2>
55 struct tml_pair {
56  static MPI_Datatype type;
57  static bool initialized;
58 };
59 template<typename T1,typename T2> MPI_Datatype tml_pair<T1,T2>::type=MPI_DATATYPE_NULL;
60 template<typename T1,typename T2> bool tml_pair<T1,T2>::initialized=false;
61 
65 template<typename T1, typename T2, typename T3>
66 struct tml_trip {
67  static MPI_Datatype type;
68  static bool initialized;
69 };
70 template<typename T1, typename T2, typename T3> MPI_Datatype tml_trip<T1,T2,T3>::type=MPI_DATATYPE_NULL;
71 template<typename T1, typename T2, typename T3> bool tml_trip<T1,T2,T3>::initialized=false;
72 
76 template<typename T1, typename T2, typename T3, typename T4>
77 struct tml_quad {
78  static MPI_Datatype type;
79  static bool initialized;
80 };
81 template<typename T1, typename T2, typename T3, typename T4> MPI_Datatype tml_quad<T1,T2,T3,T4>::type=MPI_DATATYPE_NULL;
82 template<typename T1, typename T2, typename T3, typename T4> bool tml_quad<T1,T2,T3,T4>::initialized=false;
83 
87 template<typename T1, typename T2, typename T3, typename T4, typename T5>
88 struct tml_quin {
89  static MPI_Datatype type;
90  static bool initialized;
91 };
92 template<typename T1, typename T2, typename T3, typename T4, typename T5> MPI_Datatype tml_quin<T1,T2,T3,T4,T5>::type=MPI_DATATYPE_NULL;
93 template<typename T1, typename T2, typename T3, typename T4, typename T5> bool tml_quin<T1,T2,T3,T4,T5>::initialized=false;
94 
95 static SGetType GetType;
96 
97 #include "tml/type/gettype.hpp"
98 
99 #endif //__GETTYPE_H