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,
118 const std::string& type_multidim);
133 bool exists(
const std::string& instantiation_func_name,
134 const std::string& type_multidim)
const;
152 PartialInstantiationPtr get(
const std::string& instantiation_func_name,
153 const std::string& type_multidim)
const;
167 static PartialInstantiationRegister4MultiDim& Register();
180 PartialInstantiationRegister4MultiDim();
185 PartialInstantiationRegister4MultiDim(
186 const PartialInstantiationRegister4MultiDim&);
191 ~PartialInstantiationRegister4MultiDim();
196 typedef HashTable< std::string, PartialInstantiationPtr >
197 PartialInstantiationSet;
208 HashTable< std::string, PartialInstantiationSet* > set__;
213 template <
typename GUM_SCALAR >
214 void registerPartialInstantiation(
215 const std::string& instantiation_func_name,
216 const std::string& type_multidim,
217 typename PartialInstantiationRegister4MultiDim<
218 GUM_SCALAR >::PartialInstantiationPtr function);
223 #include <agrum/tools/multidim/utils/partialInstantiationRegister4MultiDim_tpl.h>