XIOS  1.0
Xml I/O Server
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros
grid_transformation_factory_impl.hpp
Aller à la documentation de ce fichier.
1 
9 #ifndef __XIOS_GRID_TRANSFORMATION_FACTORY_HPP__
10 #define __XIOS_GRID_TRANSFORMATION_FACTORY_HPP__
11 
12 #include "xios_spl.hpp"
13 #include "exception.hpp"
14 #include "transformation.hpp"
15 
16 namespace xios {
17 
18 class CGrid;
19 class CGenericAlgorithmTransformation;
20 
21 
27 template<typename T>
29 {
30 public:
34 
36  CGrid* gridDst, CGrid* gridSrc,
37  CTransformation<T>* transformation,
38  int elementPositionInGrid,
39  std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
40  std::map<int, int>& elementPositionInGridSrc2AxisPosition,
41  std::map<int, int>& elementPositionInGridSrc2DomainPosition,
42  std::map<int, int>& elementPositionInGridDst2ScalarPosition,
43  std::map<int, int>& elementPositionInGridDst2AxisPosition,
44  std::map<int, int>& elementPositionInGridDst2DomainPosition);
45 
46 public:
47  typedef CGenericAlgorithmTransformation* (*CreateTransformationCallBack)(CGrid* gridDst, CGrid* gridSrc,
48  CTransformation<T>* transformation,
49  int elementPositionInGrid,
50  std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
51  std::map<int, int>& elementPositionInGridSrc2AxisPosition,
52  std::map<int, int>& elementPositionInGridSrc2DomainPosition,
53  std::map<int, int>& elementPositionInGridDst2ScalarPosition,
54  std::map<int, int>& elementPositionInGridDst2AxisPosition,
55  std::map<int, int>& elementPositionInGridDst2DomainPosition);
56 
57  typedef std::map<ETranformationType, CreateTransformationCallBack> CallBackMap;
60  static bool unregisterTransformation(ETranformationType transType);
62 };
63 
64 template<typename T>
66 template<typename T>
68 
69 template<typename T>
71  CGrid* gridDst, CGrid* gridSrc,
72  CTransformation<T>* transformation,
73  int elementPositionInGrid,
74  std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
75  std::map<int, int>& elementPositionInGridSrc2AxisPosition,
76  std::map<int, int>& elementPositionInGridSrc2DomainPosition,
77  std::map<int, int>& elementPositionInGridDst2ScalarPosition,
78  std::map<int, int>& elementPositionInGridDst2AxisPosition,
79  std::map<int, int>& elementPositionInGridDst2DomainPosition)
80 {
81  typename CallBackMap::const_iterator it = (*transformationCreationCallBacks_).find(transType);
82  if ((*transformationCreationCallBacks_).end() == it)
83  {
84  ERROR("CGridTransformationFactory::createTransformation(ETranformationType transType)",
85  << "Transformation type " << transType
86  << "doesn't exist. Please define.");
87  }
88  return (it->second)(gridDst, gridSrc, transformation, elementPositionInGrid,
89  elementPositionInGridSrc2ScalarPosition,
90  elementPositionInGridSrc2AxisPosition,
91  elementPositionInGridSrc2DomainPosition,
92  elementPositionInGridDst2ScalarPosition,
93  elementPositionInGridDst2AxisPosition,
94  elementPositionInGridDst2DomainPosition);
95 }
96 
97 template<typename T>
98 bool CGridTransformationFactory<T>::registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn)
99 {
100  if (0 == transformationCreationCallBacks_)
101  transformationCreationCallBacks_ = new CallBackMap();
102 
103  return (*transformationCreationCallBacks_).insert(make_pair(transType, createFn)).second;
104 }
105 
106 template<typename T>
108 {
109  return (1 == (*transformationCreationCallBacks_).erase(transType));
110 }
111 
112 
113 }
114 #endif // __XIOS_GRID_TRANSFORMATION_FACTORY_HPP__
std::map< ETranformationType, CreateTransformationCallBack > CallBackMap
enum xios::transformation_type ETranformationType
////////////////////// Définitions ////////////////////// ///
static bool registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn)
This class is a helper class to chose a algorithm (transformation) from the alogrithm list of specifi...
#define xios(arg)
static bool unregisterTransformation(ETranformationType transType)
CGenericAlgorithmTransformation *(* CreateTransformationCallBack)(CGrid *gridDst, CGrid *gridSrc, CTransformation< T > *transformation, int elementPositionInGrid, std::map< int, int > &elementPositionInGridSrc2ScalarPosition, std::map< int, int > &elementPositionInGridSrc2AxisPosition, std::map< int, int > &elementPositionInGridSrc2DomainPosition, std::map< int, int > &elementPositionInGridDst2ScalarPosition, std::map< int, int > &elementPositionInGridDst2AxisPosition, std::map< int, int > &elementPositionInGridDst2DomainPosition)
CATCH CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar *scalarDestination, CScalar *scalarSource, CReduceScalarToScalar *algo ERROR)("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",<< "Operation must be defined."<< "Scalar source "<< scalarSource->getId()<< std::endl<< "Scalar destination "<< scalarDestination->getId())
This class defines the interface for all other inherited algorithms class.
static CGenericAlgorithmTransformation * createTransformation(ETranformationType transType, CGrid *gridDst, CGrid *gridSrc, CTransformation< T > *transformation, int elementPositionInGrid, std::map< int, int > &elementPositionInGridSrc2ScalarPosition, std::map< int, int > &elementPositionInGridSrc2AxisPosition, std::map< int, int > &elementPositionInGridSrc2DomainPosition, std::map< int, int > &elementPositionInGridDst2ScalarPosition, std::map< int, int > &elementPositionInGridDst2AxisPosition, std::map< int, int > &elementPositionInGridDst2DomainPosition)