aGrUM  0.16.0
partialInstantiationRegister4MultiDim.h
Go to the documentation of this file.
1 
30 #ifndef GUM_PARTIAL_INSTANTIATION_REGISTER_4_MULTI_DIM_H
31 #define GUM_PARTIAL_INSTANTIATION_REGISTER_4_MULTI_DIM_H
32 
33 #include <agrum/core/hashTable.h>
34 #include <agrum/core/set.h>
36 #include <iostream>
37 #include <string>
38 #include <utility>
39 
40 namespace gum {
41 
42  // the base object used by the partial instantiations
43  template < typename GUM_SCALAR >
44  class MultiDimImplementation;
45 
46  // ==========================================================================
47  // === GUM_MULTI_DIM_PARTIAL_INSTANTIATION_REGISTER ===
48  // ==========================================================================
67  template < typename GUM_SCALAR >
69  public:
71  typedef MultiDimImplementation< GUM_SCALAR >* (*PartialInstantiationPtr)(
74 
75  // ========================================================================
77  // ========================================================================
79 
81 
102  void insert(const std::string& instantiation_func_name,
103  const std::string& type_multidim,
104  PartialInstantiationPtr newFunction);
105 
118  void erase(const std::string& instantiation_func_name,
119  const std::string& type_multidim);
120 
134  bool exists(const std::string& instantiation_func_name,
135  const std::string& type_multidim) const;
136 
153  PartialInstantiationPtr get(const std::string& instantiation_func_name,
154  const std::string& type_multidim) const;
155 
157  // =========================================================================
159  // =========================================================================
161 
169 
171 
172  private:
173  // =========================================================================
175  // =========================================================================
177 
182 
188 
193 
195 
199 
210  };
211 
214  template < typename GUM_SCALAR >
216  const std::string& instantiation_func_name,
217  const std::string& type_multidim,
219  GUM_SCALAR >::PartialInstantiationPtr function);
220 
221 } /* namespace gum */
222 
223 // always include the implementations
225 
226 #endif /* GUM_PARTIAL_INSTANTIATION_REGISTER_MULTI_DIM_H */
~PartialInstantiationRegister4MultiDim()
Class destructor.
static PartialInstantiationRegister4MultiDim & Register()
A named constructor that constructs one and only one Register per data type.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
MultiDimImplementation< GUM_SCALAR > *(* PartialInstantiationPtr)(const MultiDimImplementation< GUM_SCALAR > *, const HashTable< const DiscreteVariable *, Idx > &)
The type of functions used by the register.
HashTable< std::string, PartialInstantiationSet *> __set
A mapping from the types of MultiDimImplementations to partial instantiation operators.
void erase(const std::string &instantiation_func_name, const std::string &type_multidim)
Removes a given entry from the register.
bool exists(const std::string &instantiation_func_name, const std::string &type_multidim) const
Indicates whether a given entry exists in the register.
PartialInstantiationRegister4MultiDim()
Default constructor: creates an empty register.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
The class for generic Hash Tables.
Definition: hashTable.h:679
A container for registering partial instantiation functions on multiDimImplementations, i.e., functions assigning values to subsets of the variables of some tables.
void registerPartialInstantiation(const std::string &instantiation_func_name, const std::string &type_multidim, typename PartialInstantiationRegister4MultiDim< GUM_SCALAR >::PartialInstantiationPtr function)
A function to more easily register new instantiation functions in MultiDims.
void insert(const std::string &instantiation_func_name, const std::string &type_multidim, PartialInstantiationPtr newFunction)
Adds a new entry into the register.
<agrum/multidim/multiDimImplementation.h>
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
HashTable< std::string, PartialInstantiationPtr > PartialInstantiationSet
The set of associations for a given partial instantiation type.