30 #ifndef GUM_OPERATOR_REGISTER_4_MULTI_DIM_H 31 #define GUM_OPERATOR_REGISTER_4_MULTI_DIM_H 33 #include <agrum/tools/core/hashTable.h> 41 template <
typename GUM_SCALAR >
42 class MultiDimImplementation;
57 template <
typename GUM_SCALAR >
58 class OperatorRegister4MultiDim {
61 typedef MultiDimImplementation< GUM_SCALAR >* (*OperatorPtr)(
62 const MultiDimImplementation< GUM_SCALAR >*,
63 const MultiDimImplementation< GUM_SCALAR >*);
95 void insert(
const std::string& operation_name,
96 const std::string& type1,
97 const std::string& type2,
98 OperatorPtr newFunction);
117 void erase(
const std::string& operation_name,
118 const std::string& type1,
119 const std::string& type2);
138 bool exists(
const std::string& operation_name,
139 const std::string& type1,
140 const std::string& type2)
const;
163 OperatorPtr get(
const std::string& operation_name,
164 const std::string& type1,
165 const std::string& type2)
const;
179 static OperatorRegister4MultiDim< GUM_SCALAR >& Register();
190 OperatorRegister4MultiDim();
193 OperatorRegister4MultiDim(
const OperatorRegister4MultiDim< GUM_SCALAR >&);
196 ~OperatorRegister4MultiDim();
201 typedef HashTable< std::pair< std::string, std::string >, OperatorPtr >
213 HashTable< std::string, OperatorSet* > set__;
217 template <
typename GUM_SCALAR >
218 void registerOperator(
219 const std::string& operation_name,
220 const std::string& type1,
221 const std::string& type2,
222 typename OperatorRegister4MultiDim< GUM_SCALAR >::OperatorPtr function);
227 #include <agrum/tools/multidim/utils/operators/operatorRegister4MultiDim_tpl.h>