30 #ifndef GUM_PROJECTION_REGISTER_4_MULTI_DIM_H 31 #define GUM_PROJECTION_REGISTER_4_MULTI_DIM_H 33 #include <agrum/tools/core/hashTable.h> 34 #include <agrum/tools/core/set.h> 35 #include <agrum/tools/variables/discreteVariable.h> 43 template <
typename GUM_SCALAR >
44 class MultiDimImplementation;
60 template <
typename GUM_SCALAR >
61 class ProjectionRegister4MultiDim {
64 typedef MultiDimImplementation< GUM_SCALAR >* (*ProjectionPtr)(
65 const MultiDimImplementation< GUM_SCALAR >*,
66 const Set<
const DiscreteVariable* >&);
96 void insert(
const std::string& projection_name,
97 const std::string& type_multidim,
98 ProjectionPtr newFunction);
114 void erase(
const std::string& projection_name,
const std::string& type_multidim);
130 bool exists(
const std::string& projection_name,
const std::string& type_multidim)
const;
150 ProjectionPtr get(
const std::string& projection_name,
const std::string& type_multidim)
const;
164 static ProjectionRegister4MultiDim& Register();
175 ProjectionRegister4MultiDim();
178 ProjectionRegister4MultiDim(
const ProjectionRegister4MultiDim&);
181 ~ProjectionRegister4MultiDim();
186 typedef HashTable< std::string, ProjectionPtr > ProjectionSet;
197 HashTable< std::string, ProjectionSet* > _set_;
201 template <
typename GUM_SCALAR >
203 registerProjection(
const std::string& projection_name,
204 const std::string& type_multidim,
205 typename ProjectionRegister4MultiDim< GUM_SCALAR >::ProjectionPtr function);
212 #include <agrum/tools/multidim/utils/operators/projectionRegister4MultiDim_tpl.h>