30 #ifndef GUM_COMPLETE_PROJECTION_REGISTER_4_MULTI_DIM_H 31 #define GUM_COMPLETE_PROJECTION_REGISTER_4_MULTI_DIM_H 37 #include <agrum/tools/core/hashTable.h> 38 #include <agrum/tools/core/set.h> 39 #include <agrum/tools/multidim/instantiation.h> 40 #include <agrum/tools/variables/discreteVariable.h> 45 template <
typename GUM_SCALAR >
46 class MultiDimImplementation;
64 template <
typename GUM_SCALAR >
65 class CompleteProjectionRegister4MultiDim {
68 typedef GUM_SCALAR (*CompleteProjectionPtr)(
const MultiDimImplementation< GUM_SCALAR >*,
69 Instantiation* instantiation);
98 void insert(
const std::string& projection_name,
99 const std::string& type_multidim,
100 CompleteProjectionPtr newFunction);
116 void erase(
const std::string& projection_name,
const std::string& type_multidim);
132 bool exists(
const std::string& projection_name,
const std::string& type_multidim)
const;
150 CompleteProjectionPtr get(
const std::string& projection_name,
151 const std::string& type_multidim)
const;
166 static CompleteProjectionRegister4MultiDim& Register();
177 CompleteProjectionRegister4MultiDim();
180 CompleteProjectionRegister4MultiDim(
const CompleteProjectionRegister4MultiDim&);
183 ~CompleteProjectionRegister4MultiDim();
188 typedef HashTable< std::string, CompleteProjectionPtr > CompleteProjectionSet;
199 HashTable< std::string, CompleteProjectionSet* > _set_;
204 template <
typename GUM_SCALAR >
205 void registerCompleteProjection(
206 const std::string& projection_name,
207 const std::string& type_multidim,
208 typename CompleteProjectionRegister4MultiDim< GUM_SCALAR >::CompleteProjectionPtr function);
213 #include <agrum/tools/multidim/utils/operators/completeProjectionRegister4MultiDim_tpl.h>