29 #ifndef GUM_PARTIAL_INSTANTIATION_REGISTER_4_MULTI_DIM_H 30 #define GUM_PARTIAL_INSTANTIATION_REGISTER_4_MULTI_DIM_H 32 #include <agrum/tools/core/hashTable.h> 33 #include <agrum/tools/core/set.h> 34 #include <agrum/tools/variables/discreteVariable.h> 42 template <
typename GUM_SCALAR >
43 class MultiDimImplementation;
66 template <
typename GUM_SCALAR >
67 class PartialInstantiationRegister4MultiDim {
70 typedef MultiDimImplementation< GUM_SCALAR >* (*PartialInstantiationPtr)(
71 const MultiDimImplementation< GUM_SCALAR >*,
72 const HashTable<
const DiscreteVariable*, Idx >&);
101 void insert(
const std::string& instantiation_func_name,
102 const std::string& type_multidim,
103 PartialInstantiationPtr newFunction);
117 void erase(
const std::string& instantiation_func_name,
const std::string& type_multidim);
132 bool exists(
const std::string& instantiation_func_name,
const std::string& type_multidim)
const;
150 PartialInstantiationPtr get(
const std::string& instantiation_func_name,
151 const std::string& type_multidim)
const;
165 static PartialInstantiationRegister4MultiDim& Register();
178 PartialInstantiationRegister4MultiDim();
183 PartialInstantiationRegister4MultiDim(
const PartialInstantiationRegister4MultiDim&);
188 ~PartialInstantiationRegister4MultiDim();
193 typedef HashTable< std::string, PartialInstantiationPtr > PartialInstantiationSet;
204 HashTable< std::string, PartialInstantiationSet* > _set_;
209 template <
typename GUM_SCALAR >
210 void registerPartialInstantiation(
211 const std::string& instantiation_func_name,
212 const std::string& type_multidim,
213 typename PartialInstantiationRegister4MultiDim< GUM_SCALAR >::PartialInstantiationPtr
219 #include <agrum/tools/multidim/utils/partialInstantiationRegister4MultiDim_tpl.h>