aGrUM  0.16.0
partialInstantiation4MultiDim_tpl.h
Go to the documentation of this file.
1 
30 // allow partialInstantiationPatterns to be used
31 #define GUM_PARTIAL_INSTANTIATION_PATTERN_ALLOWED 1
32 
34 
35 #define GUM_MULTI_DIM_DECORATOR_PARTIAL_INST(NAME) \
36  namespace gum { \
37  template < typename GUM_SCALAR > \
38  MultiDimImplementation< GUM_SCALAR >* \
39  NAME(const MultiDimDecorator< GUM_SCALAR >& table, \
40  const HashTable< const DiscreteVariable*, Idx >& inst_vars) { \
41  const MultiDimImplementation< GUM_SCALAR >* impl = table.content(); \
42  return NAME(*impl, inst_vars); \
43  } \
44  }
45 
47 
48 #define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME partialInstantiationMultiDimArray
50 #undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
51 
52 #define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_IMPL2ARRAY_NAME \
53  partialInstantiationMultiDimArray
55 #undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_IMPL2ARRAY_NAME
56 
57 #define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_NAME \
58  partialInstantiationMultiDimArray4Pointers
60 #undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_NAME
61 
62 #define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_IMPL2ARRAY_NAME \
63  partialInstantiationMultiDimArray4Pointers
65 #undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_IMPL2ARRAY_NAME
66 
68 
69 #define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME \
70  partialInstantiationMultiDimImplementation
72 #undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
73 
74 #define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_NAME \
75  partialInstantiationMultiDimImplementation4Pointers
77 #undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
78 
79 // the operators that should be used to select appropriately the functions
80 // to partially instantiate multiDims
81 
83 #define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME partialInstantiation
85 #undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
86 
89 
90 //
91 // DO NOT FORGET TO REGISTER YOUR BINARY FUNCTIONS
92 //
93 
94 namespace gum {
95 
96  // the function used to register all the above functions
97  template < typename GUM_SCALAR >
99  static bool first_init = true;
100 
101  if (first_init) {
102  first_init = false;
103 
104  std::string MultiDimArrayString("MultiDimArray");
105  std::string MultiDimDecisionDiagramString("MultiDimDecisionDiagram");
106  std::string BaseNameString("MultiDimImplementation");
107 
108  // register base functions for multiDimArrays
109  registerPartialInstantiation< GUM_SCALAR >(
110  "i", MultiDimArrayString, &partialInstantiationMultiDimArray);
111 
112  // register default basename functions
113  registerPartialInstantiation< GUM_SCALAR >(
114  "i", BaseNameString, &partialInstantiationMultiDimImplementation);
115  }
116  }
117 
118  // the function used to register all the above functions
119  template < typename GUM_SCALAR >
121  static bool first_init = true;
122 
123  if (first_init) {
124  first_init = false;
125 
126  std::string MultiDimArrayString("MultiDimArray");
127  std::string BaseNameString("MultiDimImplementation");
128 
129  // register base functions for multiDimArrays
130  registerPartialInstantiation< GUM_SCALAR* >(
131  "i", MultiDimArrayString, &partialInstantiationMultiDimArray4Pointers);
132 
133  // register default basename functions
134  registerPartialInstantiation< GUM_SCALAR* >(
135  "i",
136  BaseNameString,
137  &partialInstantiationMultiDimImplementation4Pointers);
138  }
139  }
140 
141 } /* namespace gum */
142 
143 // remove permission to use operatorsPatterns
144 #undef GUM_PARTIAL_INSTANTIATION_PATTERN_ALLOWED
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.
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.
Definition: agrum.h:25
MultiDimArray< GUM_SCALAR *> * partialInstantiationMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, const HashTable< const DiscreteVariable *, Idx > &inst_vars)
A specialized function for instantiating variables in a MultiDimArray.
void pointerPartialInstantiation4MultiDimInit()
The function used to register all the instantiations on multidimImplementations over pointers types...
MultiDimArray< GUM_SCALAR > * partialInstantiationMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, const HashTable< const DiscreteVariable *, Idx > &inst_vars)
A specialized function for instantiating variables in a multiDimArray.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
MultiDimImplementation< GUM_SCALAR > * partialInstantiation(const MultiDimImplementation< GUM_SCALAR > &table, const HashTable< const DiscreteVariable *, Idx > &inst_vars)
Instantiate variables in a MultiDimImplementation.
void partialInstantiation4MultiDimInit()
The function used to register all the instantiation operators on multidimImplementations over non-poi...
#define GUM_MULTI_DIM_DECORATOR_PARTIAL_INST(NAME)