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
transformation.hpp
Aller à la documentation de ce fichier.
1 #ifndef __XIOS_CTransformation__
2 #define __XIOS_CTransformation__
3 
4 #include "xios_spl.hpp"
5 #include "xml_node.hpp"
7 
8 namespace xios {
9 
11 
15  template<typename T>
17  {
18  public:
19  typedef typename std::list<std::pair<ETranformationType, CTransformation<T>* > > TransformationMapTypes;
21 
22  public :
24  CTransformation(void) {}
25  virtual void checkValid(T* dest) {}
26 
27  std::vector<StdString> checkAuxInputs() { return checkAuxInputs_(); }
29 
31  virtual ~CTransformation(void) {}
32 
33  protected:
34  typedef CTransformation<T>* (*CreateTransformationCallBack)(const StdString&, xml::CXMLNode*);
35  typedef std::map<ETranformationType, CreateTransformationCallBack> CallBackMap;
37 
39  static bool unregisterTransformation(ETranformationType transType);
40 
41  protected:
42  virtual std::vector<StdString> checkAuxInputs_() { return std::vector<StdString>(); }
43  }; // class CTransformation
44 
45  template<typename T>
46  typename CTransformation<T>::CallBackMap* CTransformation<T>::transformationCreationCallBacks_ = 0; //CTransformation<T>::CallBackMap();
47 
48  template<typename T>
50  {
51  int transTypeInt = transType;
52  typename CallBackMap::const_iterator it = (*transformationCreationCallBacks_).find(transType);
53  if ((*transformationCreationCallBacks_).end() == it)
54  {
55  ERROR("CTransformation<T>::createTransformation(ETranformationType transType)",
56  << "Transformation type " << transType
57  << "doesn't exist. Please define.");
58  }
59  return (it->second)(id,node);
60  }
61 
62  template<typename T>
63  bool CTransformation<T>::registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn)
64  {
65  if (0 == transformationCreationCallBacks_)
66  transformationCreationCallBacks_ = new CallBackMap();
67 
68  return (*transformationCreationCallBacks_).insert(make_pair(transType, createFn)).second;
69  }
70 
71  template<typename T>
73  {
74  int transTypeInt = transType;
75  return (1 == (*transformationCreationCallBacks_).erase(transType));
76  }
77 
78 } // namespace xios
79 
80 #endif // __XIOS_CTransformation__
static CTransformation< T > * createTransformation(ETranformationType transType, const StdString &id, xml::CXMLNode *node=0)
enum xios::transformation_type ETranformationType
////////////////////// Définitions ////////////////////// ///
std::string StdString
Definition: xios_spl.hpp:48
#define xios(arg)
TransformationMapTypes TransMapTypes
std::map< ETranformationType, CreateTransformationCallBack > CallBackMap
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())
virtual ~CTransformation(void)
Destructeur ///.
CTransformation(void)
Constructeurs ///.
virtual std::vector< StdString > checkAuxInputs_()
virtual void checkValid(T *dest)
std::list< std::pair< ETranformationType, CTransformation< T > * > > TransformationMapTypes
std::vector< StdString > checkAuxInputs()
static CallBackMap * transformationCreationCallBacks_
static bool registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn)
static bool unregisterTransformation(ETranformationType transType)
CTransformation< T > *(* CreateTransformationCallBack)(const StdString &, xml::CXMLNode *)